equals&hashCode

noneplus發表於2020-08-15

經典規則:如果重寫了equals,必須重寫hashCode


為什麼???

這個規則考慮的應用場景:如果你的物件可能放入HashMap,HashSet,不重寫會出問題


問題場景:

new一個物件,重寫了equals,但是沒有重寫hashCode,再new一個物件,原物件.equals(新物件)等於true時,但hashCode卻不一致。

hashCode的預設計算規則:根據物件的記憶體地址進行對映,所以兩個物件的內容相同,理論上來說是不能存入HashMap中的。

但如果hashCode不一致,HashMap就會把兩個key相同的元素存到同一個集合中。


計算hash衝突時使用hashCode而不是equals:

hashCode效率更高


通過這個問題得到的反思:

之前一直有知道這個規則,但只是籠統的記住它,而不是理解。這個問題的關鍵突破點就是集合HashMap,但凡拿一個集合出來舉例,理解起來就相當容易。

想起來之前通識課老師講的一句話:物有本末,事有終始,知其先後,則近道矣。