为什么hashCode()可以为Java中的不同对象返回相同的值?

我正在阅读Head First Java的书中的一句话:

关键是哈希码可以相同,而不必保证对象相等,因为该hashCode()方法中使用的“哈希算法” 可能会为多个对象返回相同的值。

为什么该hashCode()方法可能为不同的对象返回相同的值?这不会引起问题吗?

回答:

意味着“

”。由于Java的哈希码Object.hashCode()类型为int,因此只能具有2^32不同的值。这就是为什么当两个不同的对象产生相同的hashCode时,将根据哈希算法产生所谓的“冲突”的原因。

通常,这不会产生任何问题,因为hashCode()通常与一起使用equals()。例如,a

HashMap将调用hashCode()其键,以了解键是否可能已包含在HashMap中。如果HashMap找不到哈希码,则很明显该密钥尚未包含在HashMap中。但是,如果这样做,则必须使用仔细检查所有具有相同哈希码的键equals()

A.hashCode() == B.hashCode() // does not necessarily mean

A.equals(B)

A.equals(B) // means

A.hashCode() == B.hashCode()

如果equals()hashCode()正确实施。

有关常规hashCode合同的更精确描述,请参见Javadoc。

以上是 为什么hashCode()可以为Java中的不同对象返回相同的值? 的全部内容, 来源链接: utcz.com/qa/397680.html

回到顶部