2011-04-03 63 views
1

可能重复:
In Java, why must equals() and hashCode() be consistent?
Why hashCode() can return the same value for different objects in java?为什么,如果两个对象按照等于不相等,他们不需要返回不同的hashCode值?

在JAVA API,我们可以看到,

如果两个对象是不是根据 以平等平等的,他们不要求 返回不同的hashCode值。

这是为什么?

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

+0

可能的重复http://stackoverflow.com/questions/1678205/in-java-why-must-equals-and-hashcode-be-consistent – adarshr 2011-04-03 18:36:11

+0

与[为什么hashCode()可以为不同的返回相同的值对象在java?](http://stackoverflow.com/questions/4360035/why-hashcode-can-return-the-same-value-for-different-objects-in-java) – 2011-04-03 18:47:01

回答

9

哈希码AFAIR是一个32位整数,所以许多状态被限制为2^32。几乎每个创建的类都会有更多的可能状态,所以不可能确保不同的对象不会有相同的哈希码值。

hashcodes的不等式意味着对象不相等,但hashcodes的相等意味着对象可能是相等的。

0

原因基本上是因为hashCode与Equals代码不一样。这就是为什么你有equals()。

hascode可以(并且将会)发生冲突。你有一些值得X位的信息,但是你用一个小于X位的散列代码(在这里切割一些角落)。因此,一些重复项必须适用于不相等的对象。

0

它们不需要返回不同的哈希码,但是如果它们这样做,所有与哈希相关的Java算法将执行得更好,因为哈希碰撞会更少。

+0

这并不回答这个问题。他问*为什么他们不需要返回不同的hashcode。 – 2011-04-03 18:46:45

相关问题