如果没有重写hashCode()方法,一个对象的哈希码是什么?

87
如果没有重写hashCode()方法,在Java中调用任何对象的hashCode()方法会得到什么结果?

2
看一下System.identityHashCode()它会给你默认的哈希码 - 如果你没有重写方法,这就是将会被返回的哈希码。 - Ustaman Sangat
这取决于您使用的JVM。对于Hotspot,请参见此处 - mightyWOZ
12个回答

0

两个具有不同哈希码的对象,在equals()方面必须不相等。

a.hashCode() != b.hashCode() 必须暗示着 !a.equals(b)

然而,对于equals()来说不相等的两个对象可能具有相同的哈希码。如果许多对象具有相同的哈希码,则将这些对象存储在集合或映射中将变得不太有效率。


0

返回6位十六进制数字。这通常是对象被寻址的插槽的内存位置。从算法的角度来看,我猜JDK使用双重哈希(本地实现),这是开放地址最好的哈希函数之一。这种双重哈希方案极大地降低了碰撞的可能性。

以下文章将提供支持性的想法 -

Java - HashMap confusion about collision handling and the get() method


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接