1. 程式人生 > 其它 >hashcode方法和equals方法

hashcode方法和equals方法

hashCode()方法和equals()方法的作用其實是一樣的,在Java裡都是用來對比兩個物件是否相等一致。 那麼equals()既然已實現比的功能了,為什麼還要hashCode()呢?因為重寫的equals()裡一般比較的比較全面比較複雜,這樣效率就比低,而利用hashCode()進行對比,則只要生成一個hash值進行比較就可以了,效率很高。
那麼hashCode()既然效率這麼高為什麼還要equals()呢因為hashCode()並不是完全可靠,有時候不同的物件他們生成的hashcode也會一樣(生成hash值得公式可能存在的問題),所以hashCode()只能說是大部分時候可靠,並不是絕對可靠, 所以我們可以得出:

1.equals()相等的兩個物件他們的hashCode()肯定相等,也就是用equals()對比是絕對可靠的。

2.hashCode()相等的兩個物件他們的equal()不一定相等,也就是hashCode()不是絕對可靠的。

所有對於需要大量並且快速的對比的話如果都用equals()去做顯然效率太低,所以解決方式是,每當需要對比的時候,首先用hashCode()去對比,如果hashCode()不一樣,則表示這兩個物件肯定不相等(也就是不必再用equal()去再對比了),如果hashCode()相同,此時再對比他們的equals(),如果equals()也相同,則表示這兩個物件是真的相同了,這樣既能大大提高了效率也保證了對比的絕對正確性!