为什么 Java 中 String 的 hashCode() 使用 31 作为乘数
在 Java 中,String 对象的 hashCode() 方法采用以下方式公式:
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
其中 s[i] 是第 i 个字符,n是字符串长度,^ 表示求幂。这就提出了一个问题:为什么专门选择 31 作为乘数?
素数乘数的基本原理
文档建议使用相对较大的素数作为乘数最大限度地减少哈希表中的冲突。当不同的对象产生相同的哈希码时,就会发生冲突,可能会导致性能问题。素数提供了更好的哈希码分布,减少了冲突的可能性。
为什么不是其他素数?
在其他素数中选择 31 个归因于两个因素:
因此,31 满足作为素数的两个标准,以防止冲突,同时为 Java 中的 String 对象实现高效的哈希操作。
以上是为什么Java的`String.hashCode()`使用31作为它的乘数?的详细内容。更多信息请关注PHP中文网其他相关文章!