在很多情況下,如果覆寫了equals方法,但是未覆寫hashCode話,會導致錯誤發生。而這種錯誤發生debug是很困難的。如果未覆寫hashCode的話,那麼HashMap,HashSet,HashTable集合類將會有很大的問題。
對於hashCode有這樣的規約:
1. 如果一個對象的equals作比較並且該對一直未被修改的話,那麼該對象返回的hashCode一定是一樣的在運行期間。當然hashCode在不同的機器、不同的運行期間是可以不同的。
2. 如果兩個對象通過equals方法對比是相等的話,那麼其hashCode也必然相等;如果兩個對象通過equals不相等的話,那麼其hashCode也必然不等。
當覆寫hashCode方法的時候,不要指望通過排除計算hashCode的一步的域方式來提高性能。否則的話,會導致hashCode範圍很小,分佈的鏈會很長,在查找的時候會很慢。
總之,如果兩個對象通過equals方法比較相等的話,請記住一定要覆寫hashCode方法。