為什重寫equals方法需要重寫hashCode

首先重寫equal方法必須重寫hashCode方法是通用的約定;如果不這么做,那么就無法使用hash算法的容器(hashMap、hashSet等)

Object規(guī)范的具體約定

  1. 如果沒有修改 equals 方法中用以比較的信息,在應(yīng)用程序的一次執(zhí)行過程中對一個對象重復(fù)調(diào)用 hashCode 方法時,它必須始終返回相同的值。在應(yīng)用程序的多次執(zhí)行過程中,每個執(zhí)行過程在該 對象上獲取的結(jié)果值可以不相同。
  2. 如果兩個對象根據(jù) equals(Object) 方法比較是相等的,那么在兩個對象上調(diào)用 hashCode 就必須產(chǎn)生的結(jié)果是相同的整數(shù)。
  3. 如果兩個對象根據(jù) equals(Object) 方法比較并不相等,則不要求在每個對象上調(diào)用 hashCode 都必須產(chǎn)生不同的結(jié)果。 但是,程序員應(yīng)該意識到,為不相等的對象生成不同的結(jié)果可能會提高散列 表(hash tables)的性能

hashCode的理解

  • hashCode其實是一種對象上的標識,如果兩個對象相等,那么他們的對象標識一定是相等的;

比如 團隊2中小李說小張很優(yōu)秀,小王也說小張很優(yōu)秀;那么小張就是張三這個人的標識,這時候的兩個同事口中的小張是同一個人,那么相同的人標識是相同的;那么團隊2中的小張也很優(yōu)秀,這時候小張分別是兩個團隊的中張三和張四了;這時候不同的人標識是相同的

  • hashCode是一種壓縮算法(固定長度大小的int值標識對象)

    因為對象很多,也是未知的;那么就是有限的長度標識無限的內(nèi)容了,肯定是標識不了所有對象,所以就導(dǎo)致了重復(fù)的存在(標識重復(fù),也就是hashCode重復(fù))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容