首頁 >Java >java教程 >如何有效實現集合的hashCode()?

如何有效實現集合的hashCode()?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-18 07:13:15201瀏覽

How to Effectively Implement hashCode() for Collections?

為集合實現 hashCode()

集合的 hashCode() 的最佳實作取決於其使用模式。然而,Josh Bloch 在他的《Effective Java》一書中提出的一種被廣泛接受的方法如下:

演算法:

  1. 分配一個非零值值到整數變數結果。
  2. 對於在equals() 方法:

    • 對於布林字段,計算 (f ? 0 : 1)。
    • 對於數值字段(byte、char、short、int),計算(int) f.
    • 對於長字段,計算(int)(f ^ (f >>>> 32) ).
    • 對於float 字段,計算Float.floatToIntBits(f)。
    • 對於 double 字段,計算 Double.doubleToLongBits(f) 並將結果視為 long 值。
    • 對於物件字段,使用物件的 hashCode() 方法,如果 f 是,則使用 0 null。
    • 對於數組字段,遞歸計算每個元素的雜湊值並組合它們。
  3. 將每個雜湊值 c 與結果組合: result = 37 * result c .
  4. 回傳

優點:

  • 為大多數用例提供合理的雜湊值分佈。
  • 有條不紊的方法確保一致性跨不同資料類型的行為。
  • 對影響對象的變更敏感平等。

以上是如何有效實現集合的hashCode()?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn