2011-04-03 67 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

相關問題