为什么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 meanA.equals(B)
但
A.equals(B) // meansA.hashCode() == B.hashCode()
如果equals()
和hashCode()
正确实施。
有关常规hashCode
合同的更精确描述,请参见Javadoc。
以上是 为什么hashCode()可以为Java中的不同对象返回相同的值? 的全部内容, 来源链接: utcz.com/qa/397680.html