[英]Why am I getting different hashcode values using hashcode builder for 2 equal objects?
[英]Why can't I just compare the hashCode of two objects in order to find out if they are equal or not?
為什么Eclipse實現的equals方法比較每個值,只比較兩個對象的hashCodes是否更簡單?
據我所知:
編輯:相關問題,如果實現equals實際上不需要hashCode,為什么在實現equals時總是執行hashCode?
hashCode總是為相同的輸入生成相同的哈希
正確。
因此,如果兩個對象相等,則它們應具有相同的哈希值
正確。
如果相等的對象具有相同的哈希值,我可以檢查哈希值以確定對象是否相等
不合邏輯的推論。 不相等的對象也可以具有相同的哈希碼。 這就是哈希碼的目的。
相關的問題,如果實現equals實際上並不需要hashCode,為什么在實現equals時總是執行hashCode?
因為散列需要使用它,所以在HashMap, HashSet,
和好友中使用。 如果您認為您的對象永遠不會被如此使用,請不要覆蓋它,並祝您好運。
為了補充@EJP的答案 ,這是.hashCode()
一個完全有效但無用的實現:
@Override
public int hashCode()
{
return 42; // The Answer
}
簡單地說:每只松鼠都是動物,但並非每只動物都是松鼠。 hashCode通常用於快速查找-它應該高效並且應該在查找表中均勻地分布數據-請參見此處 。 但是哈希函數會產生沖突,這就是為什么不應將其用作驗證對象相等性的方法。
這完全取決於hashCode的實現-您也可以在fge的答案中看到。
關於為什么當您覆蓋equals時通常需要重新實現它的原因:當從集合(例如HashMap)中存儲和檢索對象時,都使用它們。 hashCode確定地圖上將插入對象的位置,而equals用於標識碰撞桶內的對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.