天天看點

1.9 為什麼要重寫hashcode和equals方法,以及hashcode相同equals是否相同

我們利用hashcode進行比較效率很高,但是用hashcode進行比較并不絕對可靠,因為有的時候不同的對象可能會有相同的hashcode(hash算法的原因),然而重寫的equal()一般比較全面比較複雜,是以equals()方法是可靠的,但是對于需要大量并且快速的對比的話如果都用equal()去做顯然效率太低,是以解決方式是,每當需要對比的時候,首先用hashCode()去對比,如果hashCode()不一樣,則表示這兩個對象肯定不相等(也就是不必再用equal()去再對比了),如果hashCode()相同,此時再對比他們的equal(),如果equal()也相同,則表示這兩個對象是真的相同了,這樣既能大大提高了效率也保證了對比的絕對正确性!

這種大量的并且快速的對象對比一般使用在hash容器中,比如hashset,hashmap,hashtable等等,比如hashset裡要求對象不能重複,則他内部必然要對添加進去的每個對象進行對比,而他的對比規則就是像上面說的那樣,先hashCode(),如果hashCode()相同,再用equal()驗證,如果hashCode()都不同,則肯定不同,這樣對比的效率就很高了。

參考部落格:https://www.cnblogs.com/keyi/p/7119825.html