equals和hashCode
equals
equals方法在沒有重寫之前,與==作用一樣,重寫之后的作用是比較兩個對象的內容是否相同,java類一般都自動重寫了equals方法,但自定義的實體類沒重寫,需要手動重寫。
hashCode
HashCode只是在需要用到哈希算法的數據結構中才有用,比如 HashSet, HashMap和Hashtable。
先調用這個元素的 hashCode 方法,然后根據所得到的值計算出元素應該在數組的位置。如果這個位置上沒有元素,那么直接將它存儲在這個位置上;如果這個位置上已經有元素了,那么調用它的equals方法與新元素進行比較:相同的話就不存了,否則,將其存在這個位置對應的鏈表中(Java 中 HashSet, HashMap 和 Hashtable的實現總將元素放到鏈表的表頭)。
hashCode好處:能提高效率,采取重寫hashcode方法,先進行hashcode比較,如果不同,那么就沒必要在進行equals的比較了,這樣就大大減少了equals比較的次數,這對比需要比較的數量很大的效率提高是很明顯的。如果單純用equals方法來實現對象不重復的話,那么每加入一個新對象,都必須調用新對象的equals方法與已加入的對象一一對比。
為什么重寫equals方法后必須要重寫hashCode方法?
保證是同一個對象,如果重寫了equals方法,而沒有重寫hashcode方法,會出現equals相等的對象,hashcode不相等的情況,重寫hashcode方法就是為了避免這種情況的出現。例如,判斷是否是相同個一個人,只需判斷這個人的身份證是否相同。
總結
以上是生活随笔為你收集整理的equals和hashCode的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 集合(Collection和Map)
- 下一篇: java的值传递