小编典典

用Java如何实现hashCode()

java

hashCode()如何实现?

我的假设是它将对象存储位置用作运行哈希函数的初始数字(种子)。然而,这种情况并非如此。

我还研究了Hash:它在内部如何工作?但它不能回答我的问题。

是的,我可以下载SDK,但是在执行此操作并查看代码之前,也许其他人已经知道了。

谢谢 :)

编辑: 我知道它应该被覆盖等等,所以请尝试保持话题:)


阅读 240

收藏
2020-09-28

共1个答案

小编典典

当然,它是特定于实现的,但是通常,对象的哈希码将被延迟计算并存储在对象头中。标头可以使它们变小,同时允许复杂的锁定算法,这很奇怪。

在OpenJDK / Oracle
JVM中,计算初始哈希码的常用方法是基于第一个请求时的内存地址。对象在内存中移动,因此每次使用地址都不是一个好选择。哈希码不是实际的地址-
通常为8的倍数,对于在哈希表中直接使用哈希表(尤其是具有2的幂)而言,这不是很好。注意身份哈希码不是唯一的。

HotSpot具有构建时间选项,可以始终使用零或使用安全随机数生成器(SRNG)进行测试。

2020-09-28