摘要:如果兩個(gè)對(duì)象根據(jù)方法是不相等的,則調(diào)用這兩個(gè)對(duì)象中任一個(gè)對(duì)象的方法,不要求產(chǎn)生不同的整數(shù)結(jié)果。
以java.lang.Object來(lái)理解JVM每new一個(gè)Object,它都會(huì)將這個(gè)Object丟到一個(gè)Hash哈希表中去,這樣的話,下次做Object的比較或者取這個(gè)對(duì)象的時(shí)候,它會(huì)根據(jù)對(duì)象的hashcode再?gòu)腍ash表中取這個(gè)對(duì)象。這樣做的目的是提高取對(duì)象的效率。
具體過(guò)程是這樣:
new Object(),JVM根據(jù)這個(gè)對(duì)象的Hashcode值放入到對(duì)應(yīng)的Hash表對(duì)應(yīng)的Key上,如果不同的對(duì)象卻產(chǎn)生了相同的hash值,也就是發(fā)生了Hash key相同導(dǎo)致沖突的情況,那么就在這個(gè)Hash key的地方產(chǎn)生一個(gè)鏈表,將所有產(chǎn)生相同hashcode的對(duì)象放到這個(gè)單鏈表上串在一起。
比較兩個(gè)對(duì)象的時(shí)候,首先根據(jù)他們的hashcode去hash表中找他的對(duì)象,當(dāng)兩個(gè)對(duì)象的hashcode相同,那么就是說(shuō)他們這兩個(gè)對(duì)象放在Hash表中的同一個(gè)key上,那么他們一定在這個(gè)key上的鏈表上。那么此時(shí)就只能根據(jù)Object的equal方法來(lái)比較這個(gè)對(duì)象是否equal。當(dāng)兩個(gè)對(duì)象的hashcode不同的話,肯定他們不能equal。
java.lang.Object中對(duì)hashCode的約定:
在一個(gè)應(yīng)用程序執(zhí)行期間,如果一個(gè)對(duì)象的equals方法做比較所用到的信息沒(méi)有被修改的話,則對(duì)該對(duì)象調(diào)用hashCode方法多次,它必須始終如一地返回同一個(gè)整數(shù)。
如果兩個(gè)對(duì)象根據(jù)equals(Object o)方法是相等的,則調(diào)用這兩個(gè)對(duì)象中任一對(duì)象的hashCode方法必須產(chǎn)生相同的整數(shù)結(jié)果。
如果兩個(gè)對(duì)象根據(jù)equals(Object o)方法是不相等的,則調(diào)用這兩個(gè)對(duì)象中任一個(gè)對(duì)象的hashCode方法,不要求產(chǎn)生不同的整數(shù)結(jié)果。但如果能不同,則可能提高散列表的性能。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/77812.html
摘要:介紹的作用是獲取哈希碼,也稱(chēng)為散列碼它實(shí)際上是返回一個(gè)整數(shù)。所以具有相索引的對(duì)象,在該散列碼位置處存在多個(gè)對(duì)象,我們必須依靠的和本身來(lái)進(jìn)行區(qū)分。 1.hashCode介紹 hashCode() 的作用是獲取哈希碼,也稱(chēng)為散列碼;它實(shí)際上是返回一個(gè)int整數(shù)。這個(gè)散列碼的作用是確定該對(duì)象在散列表中的索引位置,如果有看我的上一篇文章 什么是散列表,那么這里的散列碼就相當(dāng)于上文中根據(jù)首字母查...
摘要:如果根據(jù)方法得到兩個(gè)對(duì)象不相同,那么兩個(gè)對(duì)象的方法的結(jié)果不一定不相同,我們可以利用這一點(diǎn)來(lái)提高散列表的性能。最后回到文章開(kāi)頭的問(wèn)題,如何判斷兩個(gè)對(duì)象或值是否相同這個(gè)問(wèn)題其實(shí)有兩方面的含義,一方面是判斷的方法,另一方面是判斷的效率。 Java中有很多場(chǎng)景需要判斷兩個(gè)對(duì)象或者兩個(gè)值,那么 判斷是否相同的依據(jù)是什么? 如何判斷是否相同呢? 為了解釋這個(gè)問(wèn)題,我們從Java語(yǔ)言的根說(shuō)起,那...
摘要:異步函數(shù)對(duì)象接口,包含和兩個(gè)成員方法。哈希計(jì)數(shù)在整個(gè)的源碼中都沒(méi)有找到和方法的調(diào)用,這兩個(gè)方法的具體作用是在原生中實(shí)現(xiàn)類(lèi)式繼承和私有屬性一類(lèi)的功能。 文件結(jié)構(gòu) utils/HashObject.ts文件:showImg(https://segmentfault.com/img/bVZpuq?w=642&h=472); 首先解釋一下文件結(jié)構(gòu)圖 __extends方法 通過(guò)原型對(duì)象模擬類(lèi)...
摘要:它也是用來(lái)判斷兩個(gè)對(duì)象是否相等,所以也得分不同的情況來(lái)說(shuō)明。什么是的作用是獲取哈希碼,也稱(chēng)為散列碼它返回的一個(gè)整數(shù)。這個(gè)哈希碼的作用是確定該對(duì)象在哈希表中的索引位置。它定義在的中,這就意味著中的任何類(lèi)都包含有函數(shù)。 前言 萬(wàn)丈高樓平地起,今天的聊點(diǎn)基礎(chǔ)而又經(jīng)常讓人忽視的話題,比如==與equals()區(qū)別?為何當(dāng)我們重寫(xiě)完equals()后也要有必要去重寫(xiě)hashcode()呢? .....
閱讀 1793·2021-11-18 10:02
閱讀 3524·2021-11-16 11:45
閱讀 1786·2021-09-10 10:51
閱讀 2105·2019-08-30 15:43
閱讀 1372·2019-08-30 11:23
閱讀 1484·2019-08-29 11:07
閱讀 1891·2019-08-23 17:05
閱讀 1392·2019-08-23 16:14