三 equals方法和hashcode的關係?

2021-10-07 05:42:21 字數 1103 閱讀 2369

三、equals方法和hashcode的關係?

通過前面這個例子,大概可以知道,先通過hashcode來比較,如果hashcode相等,那麼就用equals方法來比較兩個物件是否相等,用個例子說明:上面說的hash表中的8個位置,就好比8個桶,每個桶裡能裝很多的物件,物件a通過hash函式演算法得到將它放到1號桶中,當然肯定有別的物件也會放到1號桶中,如果物件b也通過演算法分到了1號桶,那麼它如何識別桶中其他物件是否和它一樣呢,這時候就需要equals方法來進行篩選了。

1、如果兩個物件equals相等,那麼這兩個物件的hashcode一定也相同

2、如果兩個物件的hashcode相同,不代表兩個物件就相同,只能說明這兩個物件在雜湊儲存結構中,存放於同乙個位置

這兩條你們就能夠理解了。

四、為什麼equals方法重寫的話,建議也一起重寫hashcode方法?

(如果物件的equals方法被重寫,那麼物件的hashcode方法也盡量重寫)

比如:有個a類重寫了equals方法,但是沒有重寫hashcode方法,看輸出結果,物件a1和物件a2使用equals方法相等,按照上面的hashcode的用法,那麼他們兩個的hashcode肯定相等,但是這裡由於沒重寫hashcode方法,他們兩個hashcode並不一樣,所以,我們在重寫了equals方法後,盡量也重寫了hashcode方法,通過一定的演算法,使他們在equals相等時,也會有相同的hashcode值。

例項:現在來看一下string的原始碼中的equals方法和hashcode方法。這個類就重寫了這兩個方法,現在為什麼需要重寫這兩個方法了吧?

equals方法:其實跟我上面寫的那個例子是一樣的原理,所以通過原始碼又知道了string的equals方法驗證的是兩個字串的值是否一樣。還有double類也重寫了這些方法。很多類有比較這類的,都重寫了這兩個方法,因為在所有類的父類object中。equals的功能就是 「==」號的功能。你們還可以比較string物件的equals和==的區別啦。這裡不再說明。

為什麼要重寫equals方法和hashcode方法

重寫之後的方法 重寫之後的equals方法和hashcode方法 override public boolean equals object o override public inthashcode 因為object的equals方法是兩個物件的引用值得比較,意思就是指向同一位址就相等,否則就相等...

(基礎)java中的equals與hashcode

hashcode 用於計算該物件的雜湊值,當以雜湊表為底層資料結構儲存資料時,就需要用到雜湊值,如hashset,hashmap等集合容器。hashcode 與 equals 為什麼要一起重寫呢?通常,是基於這樣的考慮 如果該物件使用雜湊表的進行儲存,那麼需要通過hashcode 計算雜湊碼,得到物...

為什麼重寫equals必須重寫hashCode呢

在理解這個問題時,我認為最先理解的應該是為什麼會重寫equals呢?理解清楚這個的前提下才有必要去理解為什麼需要去重寫hashcode!為什麼需要重寫equals方法呢?我認為是為了適應業務場景的需求而需要對類的equals方法進行重寫,最經典的重寫equals方法的例子莫過於string類了,在o...