首先重寫equal方法必須重寫hashCode方法是通用的約定;如果不這么做汉匙,那么就無法使用hash算法的容器(hashMap、hashSet等)
Object規(guī)范的具體約定
- 如果沒有修改 equals 方法中用以比較的信息,在應(yīng)用程序的一次執(zhí)行過程中對一個對象重復(fù)調(diào)用 hashCode 方法時来累,它必須始終返回相同的值没隘。在應(yīng)用程序的多次執(zhí)行過程中懂扼,每個執(zhí)行過程在該 對象上獲取的結(jié)果值可以不相同。
- 如果兩個對象根據(jù) equals(Object) 方法比較是相等的右蒲,那么在兩個對象上調(diào)用 hashCode 就必須產(chǎn)生的結(jié)果是相同的整數(shù)阀湿。
- 如果兩個對象根據(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ù))