成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

hashCode的作用

XanaHopper / 2268人閱讀

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

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

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

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

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

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

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

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

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

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

相關(guān)文章

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

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

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

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

    xingqiba 評論0 收藏0
  • erget源碼分析(2):全局哈希基類和全局異步函數(shù)對象接口

    摘要:異步函數(shù)對象接口,包含和兩個成員方法。哈希計數(shù)在整個的源碼中都沒有找到和方法的調(diào)用,這兩個方法的具體作用是在原生中實現(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()”之間秘密

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

    Richard_Gao 評論0 收藏0

發(fā)表評論

0條評論

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