Equal Objects必須具有相同的哈希碼。根據我的理解,當我們打算在基於散列的數據結構中使用對象時,此聲明是有效的。這是Java文檔中hashcode和equals方法的合同之一。我探討了爲什麼這是說的原因,並期待在implementation of hashtable和put
方法Equal對象必須具有相同的哈希碼?
if ((e.hash == hash) && e.key.equals(key))
所以我把它發現了下面的代碼,合同來自上述條件e.hash == hash
。我進一步試圖探究爲什麼java在比較兩個對象相等時檢查散列碼。因此,這裏是我的understaing
如果兩個相等的對象都等於hascodes那麼他們可以存儲在同一個桶,這將在以下方面是很好的單桶只查找
其更好地檢查hashcode然後實際調用equals方法,因爲hascode方法比equals方法成本更低,因爲這裏我們只需要比較int值,其中equals方法可能是引發對象字段比較。所以hashcode方法提供了一個額外的過濾器。
如果上述兩個原因都有效,請糾正我的錯誤?
我不認爲'.equals()'用於比較哈希代碼或對象引用。 – BoltClock
當您使用不可變對象並且只計算一次散列碼時,這是一個很好的方法。哦,不要忘記HashTable已被棄用。 –