[英]Is it necessary to override hashcode method in non hashed datastructure
我從 Java 中的對象的哈希碼方法中了解到:需要計算對象的哈希碼,該哈希碼又用於計算 object 在哈希數據結構(如 hashMap)中的索引/存儲桶位置。
因此,對於不與散列數據結構一起使用的 class 不需要在其中實現 hashCode() 方法是否正確? 換句話說,對於非散列數據結構是否足以覆蓋 equals() 方法?
如果我的假設是錯誤的,也請糾正我。
從理論上講,你是對的:如果你知道你的 object 永遠不會以任何需要 hash 代碼的方式使用,那么不實現hashCode
就不會導致任何不好的事情發生。
在實踐中,有理由不依賴這個事實:
hashCode
那么,事情會 go 壞。equals
而你沒有實現hashCode
那么你幾乎肯定會違反hashCode
要求它與equals
一致的合同。 如果您的代碼違反了其他代碼所依賴的契約,那么其他代碼可能會以意想不到的/奇怪的方式悄無聲息地失敗。equals
,如果您這樣做,同時生成適當的hashCode
並不需要額外的努力。 請注意,所有這些假設您甚至想要實現equals
:如果您完全不關心 object 的相等性(這實際上很常見,並非每種類型都需要特定的相等性定義),那么您可以只留下equals
和hashCode
在你的代碼之外,它都是符合標准的('盡管你的類型可能與你的類型的“直觀”相等定義不匹配)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.