hash值相同但內(nèi)容不同 如果兩個(gè)對象相同,那么它們的hashCode值一定要相同?
如果兩個(gè)對象相同,那么它們的hashCode值一定要相同?如果兩個(gè)對象具有相同的值(x.equals(y)==true),則它們必須具有相同的哈希代碼。Hash,一般翻譯為“Hash”,也直接音譯為“
如果兩個(gè)對象相同,那么它們的hashCode值一定要相同?
如果兩個(gè)對象具有相同的值(x.equals(y)==true),則它們必須具有相同的哈希代碼。Hash,一般翻譯為“Hash”,也直接音譯為“Hash”,是通過Hash算法將任意長度的輸入(也稱為預(yù)映像)轉(zhuǎn)換成固定長度的輸出,輸出為Hash值。這種變換是一種壓縮映射,即散列值的空間通常比輸入的空間小得多,不同的輸入可能被散列到同一個(gè)輸出中,不可能從散列值中唯一地確定輸入值。
1)如果對象相等,則哈希碼必須相等;
2)如果哈希碼相等,則對象可能不相等。
如果兩個(gè)對象相同,那么它們的hashCode值一定要相同?
Hashcode是所有Java對象的固有方法
如果不重載,它實(shí)際上會返回JVM堆上對象的內(nèi)存地址,不同對象的內(nèi)存地址肯定會不同。但是,string類的hashcode算法是固定的,可能是相同的。
如果重載,則由于算法的原因,兩個(gè)不同對象的哈希代碼可能相同。
java中兩個(gè)對象值相同卻可能有不同的hashcode對嗎?
對象通常放在堆棧中
指向的內(nèi)存區(qū)域放在堆中
對象引用的內(nèi)存區(qū)域可以相同,所以它們的值相同
但是堆棧中的地址不同,所以它們的哈希碼不同
哈希的本質(zhì)是X-> f(X),那么f(x)是一個(gè)有限集,x是一個(gè)無限集。因此,從理論上講,任何散列都可能發(fā)生沖突。右