簡體   English   中英

是否有必要覆蓋非哈希數據結構中的哈希碼方法

[英]Is it necessary to override hashcode method in non hashed datastructure

我從 Java 中的對象的哈希碼方法中了解到:需要計算對象的哈希碼,該哈希碼又用於計算 object 在哈希數據結構(如 hashMap)中的索引/存儲桶位置。

因此,對於不與散列數據結構一起使用的 class 不需要在其中實現 hashCode() 方法是否正確? 換句話說,對於非散列數據結構是否足以覆蓋 equals() 方法?

如果我的假設是錯誤的,也請糾正我。

從理論上講,你是對的:如果你知道你的 object 永遠不會以任何需要 hash 代碼的方式使用,那么不實現hashCode就不會導致任何不好的事情發生。

在實踐中,有理由不依賴這個事實:

  1. 代碼更改和最初計划僅存在於非散列結構中的對象被放入集合或用作映射的鍵,因為需求發生變化。 如果你不實現hashCode那么,事情會 go 壞。
  2. 如果你實現了equals而你沒有實現hashCode那么你幾乎肯定會違反hashCode要求它與equals一致的合同。 如果您的代碼違反了其他代碼所依賴的契約,那么其他代碼可能會以意想不到的/奇怪的方式悄無聲息地失敗。
  3. 為了避免錯誤,通常最好讓您的 IDE 生成equals ,如果您這樣做,同時生成適當的hashCode並不需要額外的努力。

請注意,所有這些假設您甚至想要實現equals :如果您完全不關心 object 的相等性(這實際上很常見,並非每種類型都需要特定的相等性定義),那么您可以只留下equalshashCode在你的代碼之外,它都是符合標准的('盡管你的類型可能與你的類型的“直觀”相等定義不匹配)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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