當我們 使用hashmap的時候,如果key是我們的自定義型別的話,我們想要的結果是只要物件中所有的屬性的值相等,這樣的物件就是相等的。
而預設情況下object下的equals方法比較的是兩個物件在記憶體中的位址是否相同。所以此時我們要重寫equals方法.
hashcode()
方法是乙個本地方法,他是由物件的位址經過hash演算法得到的結果。hashcode有這樣乙個規則:當兩個物件相等(equals相等),那麼這兩個物件的hashcode值一定是相等的
,所以此時我們需要重寫hashcode方法.因為new出來的兩個物件的位址肯定不一樣
下面是通過idea自動為我們生成的equals和hashcode方法
public class student
public void setage(integer age)
public string getname()
public void setname(string name)
@override
public boolean equals(object o)
// 使用name和age經過hash運算
@override
public int hashcode()
}
有這樣乙個小結論:
equals相等 hashcode一定相等
equals不想等 hashcode可能相等
hashcode相等 equals不一定相等
hashcode不想等 equals一定不相等
為什麼要重寫equals方法和hashcode方法
重寫之後的方法 重寫之後的equals方法和hashcode方法 override public boolean equals object o override public inthashcode 因為object的equals方法是兩個物件的引用值得比較,意思就是指向同一位址就相等,否則就相等...
為什麼重寫equals必須重寫hashCode呢
在理解這個問題時,我認為最先理解的應該是為什麼會重寫equals呢?理解清楚這個的前提下才有必要去理解為什麼需要去重寫hashcode!為什麼需要重寫equals方法呢?我認為是為了適應業務場景的需求而需要對類的equals方法進行重寫,最經典的重寫equals方法的例子莫過於string類了,在o...
為什麼重寫equals還要重寫hashcode
在定義的類重寫equals方法的同時為什麼一定要重寫jdk本地的hashcode方法呢?我們從兩者的本質上出發去解決這個問題 hashcode 方法時本地方法,返回的是物件的記憶體位址,object類的equals方法比較的就是物件的記憶體位址,所以說如果equals相等,說明兩個物件的位址也相等 ...