为什么,如果两个对象根据equals不相等,则不需要返回不同的hashCode值?

时间:2011-04-03 18:34:38

标签: java

  

可能重复:
  In Java, why must equals() and hashCode() be consistent?
  Why hashCode() can return the same value for different objects in java?

在JAVA API中,我们可以看到

  

如果两个物体不相等   等于,他们不是必须的   返回不同的hashCode值。

为什么会这样?

如果两个对象根据equals不相等,那么应该要求它返回不同的hashCode值吗?

3 个答案:

答案 0 :(得分:9)

散列码是AFAIR的32位整数,因此许多状态限制为2 ^ 32。您创建的几乎每个类都会有更多可能的状态,因此无法确保不同的对象不会具有相同的哈希码值。

哈希码的不等意味着对象不相等,但哈希码的相等意味着对象可能相等。

答案 1 :(得分:0)

原因主要是因为hashCode与Equals代码不同。这就是为什么你有equals()。

hascode可以(并且会)发生碰撞。你有一些信息值得X位,但你用一个小于X位的哈希编码(在这里切一些角)。因此,一些重复项必须可用于不相等的对象。

答案 2 :(得分:0)

他们不需要返回不同的哈希码,但如果他们这样做,所有与哈希相关的Java算法都会表现得更好,因为哈希冲突会更少。