91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行IdentityHashMap集合的源碼解析

發布時間:2021-12-08 15:45:22 來源:億速云 閱讀:88 作者:柒染 欄目:大數據

如何進行IdentityHashMap集合的源碼解析,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

我們將介紹一下IdentityHashMap集合的相關知識。看名字我們知道IdentityHashMap集合底層是通過HashMap集合實現的。那么按照我們分析其它集合一樣,它也一定是具有某種特殊的特性的,否則Java也不會提供一個單獨的IdentityHashMap集合了。我們先不介紹IdentityHashMap集合有哪種特性,我們先看下面的例子,然后在做詳細說明。

如何進行IdentityHashMap集合的源碼解析

看輸出結果我們對HashMap集合的輸出結果不會感到意外,但是IdentityHashMap集合的結果卻很讓人費解。因為按照我們以前對集合的分析,不是說在HashMap中不允許有重復的key存在嗎,如果有相同的key則后添加到集合中的元素的value會覆蓋前一個元素中的value,這也是我們在分析HashMap那篇文章中總結出的HashMap的特性。那么為什么在IdentityHashMap集合中卻可以保存兩個相同的key呢?其實答案很簡單,這就是IdentityHashMap集合的特性所在。

我們在分析HashMap底層實現時知道,在HashMap集合中首先會判斷key的hashCode是否相等,然后在判斷key是否相等。如果這兩個判斷都相等則認為當前存儲的兩個元素的key是相等的,于是就執行value的覆蓋操作。并且上述判斷不但會判斷==還會用equals方法判斷。這也是為什么在將對象類型的數據保存在HashMap集合中必須重寫equals方法的根本原因。如果不這樣做HashMap集合就會認為這兩個元素的key不是相同的。這也就是IdentityHashMap集合與HashMap集合的底層實現不同的根本所在,就是因為在IdentityHashMap集合中只會用==判斷兩個key是否相等,而不會調用key的equals方法判斷。如果兩個key==相等則IdentityHashMap集合就會認為這兩個key相等,于是執行value的覆蓋操作。如果保存在IdentityHashMap集合中的key==不相等,則就會把這兩個key所對應的元素都保存在集合中,而不會執行value的覆蓋操作。

在上述代碼中我們創建了兩個String對象,并且我們知道在Java中如果不是基本數據類型采用==比較的話,它們實際比較的是內存地址。因為我們創建了兩個String對象,所以上述的比較結果一定為false。所在IdentityHashMap集合就會認為這兩個key是不同的key,于是將這兩個元素都保存在集合中。而在HashMap集合中除了進行上述比較外,還會調用key的equals方法進行比較。因為我們保存的key是一個String,并且在String這個類中已經重寫了equals方法,所以調用該方法實際比較的就是真正的值,也就是key和key做比較。正是因為它們相等,所以HashMap集合就會執行value的覆蓋操作。所以在輸出的結果中HashMap集合只會保存一個元素。下面我們看一下IdentityHashMap集合的底層源碼,來證明我們上述所說的。

如何進行IdentityHashMap集合的源碼解析

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

林甸县| 平凉市| 台湾省| 汝南县| 永春县| 剑阁县| 马尔康县| 河西区| 章丘市| 安陆市| 贵州省| 吉首市| 嵊州市| 岳池县| 利川市| 额济纳旗| 临潭县| 利辛县| 曲周县| 阳新县| 金昌市| 常山县| 合水县| 吉林省| 成武县| 大足县| 大邑县| 阿合奇县| 读书| 绥棱县| 额尔古纳市| 江西省| 临武县| 南平市| 唐河县| 三河市| 乃东县| 凤阳县| 四子王旗| 武川县| 西宁市|