首頁 >Java >java教程 >重寫 `hashCode()` 和 `equals()` 如何影響 HashMap 效能?

重寫 `hashCode()` 和 `equals()` 如何影響 HashMap 效能?

Susan Sarandon
Susan Sarandon原創
2024-11-01 17:51:02875瀏覽

How Does Overriding `hashCode()` and `equals()` Impact HashMap Performance?

了解equals 和hashCode 在HashMap 中的工作原理

Java 中的HashMap 使用hashCode() 和equals() 方法的組合來有效地儲存和擷取鍵值對。當新增新的鍵值對時,首先計算鍵的hashCode()方法,以確定該條目將放置在哪個雜湊桶中。然後使用 equals() 方法檢查所選儲存桶中的重複鍵。

在給定的測試程式碼中,ToDos 類別定義了 equals() 的原始實現,確保具有相同日期欄位的物件將被視為平等。當行 // public int hashCode() { return 9;如果取消註釋,所有 ToDos 對象,無論其日期字段如何,都被迫返回相同的 hashCode() 值。因此,所有 ToDos 物件都對應到同一個哈希桶,無論其日期欄位為何。

當使用註解掉的行呼叫map.size() 方法時,具有不同日期的ToDos 物件欄位(t1、t2、t3)由於其不同的hashCode() 值而被放置在不同的哈希桶中。因此,map.size() 準確地傳回三的計數。

相反,當該行取消註解時,ToDos 物件全部映射到同一個雜湊桶,map.size() 方法隨後傳回數二。這是因為 HashMap 認為所有 ToDos 物件“邏輯上等效”,因為它們會傳回相同的 hashCode() 值。

總而言之, hashCode() 和 equals() 方法的使用是對於HashMap的高效運作至關重要。透過僅重寫 hashCode() 方法,必須確保邏輯上等效的鍵產生一致的 hashCode() 值。僅重寫 equals() 方法可能會導致效能問題,因為確定邏輯等效性所需的比較次數會增加。在透過 hashCode() 進行高效散列和透過 equals() 確保物件相等之間取得適當的平衡是最佳 HashMap 使用的關鍵。

以上是重寫 `hashCode()` 和 `equals()` 如何影響 HashMap 效能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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