亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

hashCode的作用

XanaHopper / 2374人閱讀

摘要:如果兩個(gè)對象根據(jù)方法是不相等的,則調(diào)用這兩個(gè)對象中任一個(gè)對象的方法,不要求產(chǎn)生不同的整數(shù)結(jié)果。

以java.lang.Object來理解JVM每new一個(gè)Object,它都會將這個(gè)Object丟到一個(gè)Hash哈希表中去,這樣的話,下次做Object的比較或者取這個(gè)對象的時(shí)候,它會根據(jù)對象的hashcode再從Hash表中取這個(gè)對象。這樣做的目的是提高取對象的效率。

具體過程是這樣:
new Object(),JVM根據(jù)這個(gè)對象的Hashcode值放入到對應(yīng)的Hash表對應(yīng)的Key上,如果不同的對象卻產(chǎn)生了相同的hash值,也就是發(fā)生了Hash key相同導(dǎo)致沖突的情況,那么就在這個(gè)Hash key的地方產(chǎn)生一個(gè)鏈表,將所有產(chǎn)生相同hashcode的對象放到這個(gè)單鏈表上串在一起。

比較兩個(gè)對象的時(shí)候,首先根據(jù)他們的hashcode去hash表中找他的對象,當(dāng)兩個(gè)對象的hashcode相同,那么就是說他們這兩個(gè)對象放在Hash表中的同一個(gè)key上,那么他們一定在這個(gè)key上的鏈表上。那么此時(shí)就只能根據(jù)Object的equal方法來比較這個(gè)對象是否equal。當(dāng)兩個(gè)對象的hashcode不同的話,肯定他們不能equal。

java.lang.Object中對hashCode的約定:

在一個(gè)應(yīng)用程序執(zhí)行期間,如果一個(gè)對象的equals方法做比較所用到的信息沒有被修改的話,則對該對象調(diào)用hashCode方法多次,它必須始終如一地返回同一個(gè)整數(shù)。

如果兩個(gè)對象根據(jù)equals(Object o)方法是相等的,則調(diào)用這兩個(gè)對象中任一對象的hashCode方法必須產(chǎn)生相同的整數(shù)結(jié)果。

如果兩個(gè)對象根據(jù)equals(Object o)方法是不相等的,則調(diào)用這兩個(gè)對象中任一個(gè)對象的hashCode方法,不要求產(chǎn)生不同的整數(shù)結(jié)果。但如果能不同,則可能提高散列表的性能。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/77812.html

相關(guān)文章

  • 面試官:“你重寫過 hashcode 和 equals 么,為什么重寫equals時(shí)必須重寫hash

    摘要:介紹的作用是獲取哈希碼,也稱為散列碼它實(shí)際上是返回一個(gè)整數(shù)。所以具有相索引的對象,在該散列碼位置處存在多個(gè)對象,我們必須依靠的和本身來進(jìn)行區(qū)分。 1.hashCode介紹 hashCode() 的作用是獲取哈希碼,也稱為散列碼;它實(shí)際上是返回一個(gè)int整數(shù)。這個(gè)散列碼的作用是確定該對象在散列表中的索引位置,如果有看我的上一篇文章 什么是散列表,那么這里的散列碼就相當(dāng)于上文中根據(jù)首字母查...

    asce1885 評論0 收藏0
  • 【碼藝雜談】Java中相同與不同

    摘要:如果根據(jù)方法得到兩個(gè)對象不相同,那么兩個(gè)對象的方法的結(jié)果不一定不相同,我們可以利用這一點(diǎn)來提高散列表的性能。最后回到文章開頭的問題,如何判斷兩個(gè)對象或值是否相同這個(gè)問題其實(shí)有兩方面的含義,一方面是判斷的方法,另一方面是判斷的效率。 Java中有很多場景需要判斷兩個(gè)對象或者兩個(gè)值,那么 判斷是否相同的依據(jù)是什么? 如何判斷是否相同呢? 為了解釋這個(gè)問題,我們從Java語言的根說起,那...

    xingqiba 評論0 收藏0
  • erget源碼分析(2):全局哈?;惡腿之惒胶瘮?shù)對象接口

    摘要:異步函數(shù)對象接口,包含和兩個(gè)成員方法。哈希計(jì)數(shù)在整個(gè)的源碼中都沒有找到和方法的調(diào)用,這兩個(gè)方法的具體作用是在原生中實(shí)現(xiàn)類式繼承和私有屬性一類的功能。 文件結(jié)構(gòu) utils/HashObject.ts文件:showImg(https://segmentfault.com/img/bVZpuq?w=642&h=472); 首先解釋一下文件結(jié)構(gòu)圖 __extends方法 通過原型對象模擬類...

    godlong_X 評論0 收藏0
  • “==”、“equals()”、“hashcode()”之間秘密

    摘要:它也是用來判斷兩個(gè)對象是否相等,所以也得分不同的情況來說明。什么是的作用是獲取哈希碼,也稱為散列碼它返回的一個(gè)整數(shù)。這個(gè)哈希碼的作用是確定該對象在哈希表中的索引位置。它定義在的中,這就意味著中的任何類都包含有函數(shù)。 前言 萬丈高樓平地起,今天的聊點(diǎn)基礎(chǔ)而又經(jīng)常讓人忽視的話題,比如==與equals()區(qū)別?為何當(dāng)我們重寫完equals()后也要有必要去重寫hashcode()呢? .....

    Richard_Gao 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<