為集合實現 hashCode()
集合的 hashCode() 的最佳實作取決於其使用模式。然而,Josh Bloch 在他的《Effective Java》一書中提出的一種被廣泛接受的方法如下:
演算法:
- 分配一個非零值值到整數變數結果。
-
對於在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。
- 對於數組字段,遞歸計算每個元素的雜湊值並組合它們。
- 將每個雜湊值 c 與結果組合: result = 37 * result c .
- 回傳
優點:
- 為大多數用例提供合理的雜湊值分佈。
- 有條不紊的方法確保一致性跨不同資料類型的行為。
- 對影響對象的變更敏感平等。
以上是如何有效實現集合的hashCode()?的詳細內容。更多資訊請關注PHP中文網其他相關文章!