![](/img/trans.png)
[英]Why should I override hashCode() when I override equals() method?
[英]why should I override equals and hashcode method for following scnerio
為什么我需要重寫以直接訪問Hash映射中的值。也就是說,如果按照HashMap將數據插入到hashmap中,則可以通過將Key設置為Integer來獲取值,而將Object用作Value。在這種情況下,必須重寫equals()和hashCode()方法?請提出建議。
不,您不需要重寫任何內容即可將對象用作HashMap
的值 。
僅密鑰需要具有有效的hashCode()
。
但是,如果要使用Map#containsValue
, List#indexOf
或Collection#contains
類的東西,則需要實現這兩種方法(從技術上講,這僅是equals
,但實際上這兩個是一個集合)(並且這些方法不應僅使用引用)身份)。
當您想從hashTable中檢索特定的elem時,可以使用hashCode()
來搜索它。 hashCode()
不必區分。 實際上,您可以為所有實例返回相同的整數,但是,elems存儲在列表中而不是hashTable中,這將導致性能問題。
缺省情況下,JVM的hashCode()
(這是子類的Object
的實現,范圍從擴展)根據對象的內存地址返回一個整數,因此這足夠了,但是JVM標准不需要此實現。 。
默認情況下(Class object
),equals()的實現將返回true
並且僅當它們具有相同的引用時才返回true
,即obj1 == obj2
。 讀這個
請記住:
hashCode()
hashCode()
不需要彼此相等。 我認為在大多數情況下(不需要從其他Class繼承),不需要重寫hashCode()
,因為現代JVM對您來說做得很好。
因此結論是:
如果您的超類已覆蓋hashCode()
和equals()
方法,則應覆蓋它們,或者至少應看一下實現,並決定是否應覆蓋它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.