为了账号安全,请及时绑定邮箱和手机立即绑定

Arrays.hashCode 是如何实现的?

Arrays.hashCode 是如何实现的?

智慧大石 2022-07-14 17:27:27
我正在阅读Arrays.hashCode下面提供的代码,public static int hashCode(Object a[]) {        if (a == null)            return 0;        int result = 1;        for (Object element : a)            result = 31 * result + (element == null ? 0 : element.hashCode());        return result;    }31我发现为什么选择散列还不清楚。其次,element.hashCode()将我发送到Object定义它的类:@HotSpotIntrinsicCandidatepublic native int hashCode();element.hashCode()每次迭代如何计算?谢谢你。
查看完整描述

1 回答

?
达令说

TA贡献1821条经验 获得超6个赞

来自《有效的 Java》一书:

选择值 31 是因为它是一个奇数素数。如果它是偶数并且乘法溢出,则信息将丢失,因为乘以 2 相当于移位。使用素数的优势不太明显,但它是传统的。31 的一个很好的特性是乘法可以用移位和减法代替以获得更好的性能:31 * i == (i << 5) - i。现代虚拟机自动进行这种优化。


查看完整回答
反对 回复 2022-07-14
  • 1 回答
  • 0 关注
  • 156 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信