簡體   English   中英

為什么我應該重寫equals和hashcode方法來跟隨scnerio

[英]why should I override equals and hashcode method for following scnerio

為什么我需要重寫以直接訪問Hash映射中的值。也就是說,如果按照HashMap將數據插入到hashmap中,則可以通過將Key設置為Integer來獲取值,而將Object用作Value。在這種情況下,必須重寫equals()和hashCode()方法?請提出建議。

不,您不需要重寫任何內容即可將對象用作HashMap

密鑰需要具有有效的hashCode()

但是,如果要使用Map#containsValueList#indexOfCollection#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM