【面試問題】爲什麼重寫equals方法,還必須要重寫hashcode方法

# 轉載鏈接在此,感謝這位博主

爲什麼?

是爲了提高效率,採取重寫hashcode方法,先進行hashcode比較,如果不同,那麼就沒必要在進行equals的比較了,這樣就大大減少了equals比較的次數,這對比需要比較的數量很大的效率提高是很明顯的,一個很好的例子就是在集合中的使用;

我們都知道java中的List集合是有序的,因此是可以重複的,而set集合是無序的,因此是不能重複的,那麼怎麼能保證不能被放入重複的元素呢,但靠equals方法一樣比較的話,如果原來集合中以後又10000個元素了,那麼放入10001個元素,難道要將前面的所有元素都進行比較,看看是否有重複,歐碼噶的,這個效率可想而知,因此hashcode就應遇而生了,java就採用了hash表,利用哈希算法(也叫散列算法),就是將對象數據根據該對象的特徵使用特定的算法將其定義到一個地址上,那麼在後面定義進來的數據只要看對應的hashcode地址上是否有值,那麼就用equals比較,如果沒有則直接插入,只要就大大減少了equals的使用次數,執行效率就大大提高了。

同事也是爲了保證同一個對象,保證在equals相同的情況下hashcode值必定相同,如果重寫了equals而未重寫hashcode方法,可能就會出現兩個沒有關係的對象equals相同的(因爲equal都是根據對象的特徵進行重寫的),但hashcode確實不相同的。

總結來說就是兩點

1.使用hashcode方法提前校驗,可以避免每一次比對都調用equals方法,提高效率

2.保證是同一個對象,如果重寫了equals方法,而沒有重寫hashcode方法,會出現equals相等的對象,hashcode不相等的情況,重寫hashcode方法就是爲了避免這種情況的出現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章