首页 > Java > java教程 > 为什么 Java 的字符串'hashCode()”使用 31 作为乘数?

为什么 Java 的字符串'hashCode()”使用 31 作为乘数?

Linda Hamilton
发布: 2024-12-26 13:28:13
原创
896 人浏览过

Why Does Java's `hashCode()` for Strings Use 31 as a Multiplier?

Java 字符串的 hashCode() 方法中为什么使用 31 作为乘数?

Java 文档规定了 String 对象的乘数的计算哈希码如下:

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
登录后复制

其中 s[i] 是第 i 个字符串的字符,n 是字符串的长度,^ 表示求幂。该公式包含固定乘数 31。

使用 31 作为乘数的基本原理

根据 Joshua Bloch 的受人尊敬的著作《Effective Java》,选择 31因为乘数取决于几个因子:

  • 奇素数: 作为奇素数,31 确保如果乘法导致溢出,信息不会丢失(与使用偶数乘数不同,偶数乘数相当于移位).
  • 传统:使用素数作为乘数
  • 性能优化: 31 有一个独特的属性,可以提高性能:31 * i 可以有效地替换为 (i

以上是为什么 Java 的字符串'hashCode()”使用 31 作为乘数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板