學習effective java-9對所有對象共同的方法之覆寫equals方法時請同時覆寫hashCode

該知識點是自己從書籍中學習的筆記

   在很多情況下,如果覆寫了equals方法,但是未覆寫hashCode話,會導致錯誤發生。而這種錯誤發生debug是很困難的。如果未覆寫hashCode的話,那麼HashMap,HashSet,HashTable集合類將會有很大的問題。

  對於hashCode有這樣的規約:

  1. 如果一個對象的equals作比較並且該對一直未被修改的話,那麼該對象返回的hashCode一定是一樣的在運行期間。當然hashCode在不同的機器、不同的運行期間是可以不同的。

2.  如果兩個對象通過equals方法對比是相等的話,那麼其hashCode也必然相等;如果兩個對象通過equals不相等的話,那麼其hashCode也必然不等。

 當覆寫hashCode方法的時候,不要指望通過排除計算hashCode的一步的域方式來提高性能。否則的話,會導致hashCode範圍很小,分佈的鏈會很長,在查找的時候會很慢。

總之,如果兩個對象通過equals方法比較相等的話,請記住一定要覆寫hashCode方法。

發佈了42 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章