日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HashMap源码分析1:添加元素

發(fā)布時(shí)間:2025/5/22 编程问答 69 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HashMap源码分析1:添加元素 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文源碼基于JDK1.8.0_45。?

?

1 final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) { 2 Node<K,V>[] tab; Node<K,V> p; int n, i; 3 //延遲初始化數(shù)組,這是HashMap中最基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu) 4 if ((tab = table) == null || (n = tab.length) == 0) 5 n = (tab = resize()).length; 6 //數(shù)組中hash對(duì)應(yīng)位置沒有元素,就把當(dāng)前元素放入作為頭節(jié)點(diǎn),結(jié)束put的流程 7 //計(jì)算哈希值在數(shù)組中的位置時(shí),使用了數(shù)組容量-1與哈希值做與運(yùn)算的方式,保留了哈希值的低位數(shù)據(jù)作為數(shù)組下標(biāo) 8 if ((p = tab[i = (n - 1) & hash]) == null) 9 tab[i] = newNode(hash, key, value, null); 10 else { 11 Node<K,V> e; K k; 12 //如果頭節(jié)點(diǎn)的Key值相等,則頭節(jié)點(diǎn)是目標(biāo)元素 13 if (p.hash == hash && 14 ((k = p.key) == key || (key != null && key.equals(k)))) 15 e = p; 16 //如果頭節(jié)點(diǎn)是一個(gè)樹節(jié)點(diǎn),表示該數(shù)據(jù)結(jié)構(gòu)是紅黑樹,則調(diào)用紅黑樹的方法查找或添加目標(biāo)元素 17 else if (p instanceof TreeNode) 18 e = ((TreeNode<K,V>)p).putTreeVal(this, tab, hash, key, value); 19 //最后判斷該數(shù)據(jù)結(jié)構(gòu)為鏈表,并在鏈表中查找Key相等的元素 20 else { 21 for (int binCount = 0; ; ++binCount) { 22 //鏈表中不存在該Key值,將新值添加到鏈表末端,如果鏈表長(zhǎng)度達(dá)到閾值需要轉(zhuǎn)換為紅黑樹 23 //treeifyBin方法中生成紅黑樹有一個(gè)條件,如果數(shù)組長(zhǎng)度太小,只會(huì)先執(zhí)行擴(kuò)容操作,當(dāng)數(shù)組長(zhǎng)度達(dá)到生成樹的閾值時(shí)才會(huì)執(zhí)行生成紅黑樹的邏輯 24 if ((e = p.next) == null) { 25 p.next = newNode(hash, key, value, null); 26 if (binCount >= TREEIFY_THRESHOLD - 1) // -1 for 1st 27 treeifyBin(tab, hash); 28 break; 29 } 30 //如果在鏈表中找到目標(biāo)節(jié)點(diǎn),則中斷循環(huán) 31 if (e.hash == hash && 32 ((k = e.key) == key || (key != null && key.equals(k)))) 33 break; 34 p = e; 35 } 36 } 37 //如果HashMap中不存在目標(biāo)元素,前面的代碼邏輯已經(jīng)將元素添加進(jìn)了Map中 38 //如果HashMap中存在目標(biāo)元素,則視情況選擇是否更新舊的值 39 if (e != null) { // existing mapping for key 40 V oldValue = e.value; 41 if (!onlyIfAbsent || oldValue == null) 42 e.value = value; 43 afterNodeAccess(e); 44 return oldValue; 45 } 46 } 47 /** 48 * 如果新增了節(jié)點(diǎn),最后還需要更新節(jié)點(diǎn)的數(shù)量,如果超過閾值則需要對(duì)HashMap進(jìn)行數(shù)組擴(kuò)容,并重新分配節(jié)點(diǎn)所在的數(shù)組 49 * 擴(kuò)容的原因在于數(shù)組的長(zhǎng)度一定,當(dāng)元素的哈希值碰撞時(shí),會(huì)以鏈表或紅黑樹的形式存儲(chǔ),元素的數(shù)量太多會(huì)影響HashMap的讀寫效率 50 * 因此需要對(duì)數(shù)組進(jìn)行擴(kuò)容,使元素更加分散,減少鏈表的長(zhǎng)度或紅黑樹的高度。 51 */ 52 ++modCount; 53 if (++size > threshold) 54 resize(); 55 afterNodeInsertion(evict); 56 return null; 57 }

?

代碼中涉及的resize方法、紅黑樹的實(shí)現(xiàn)、鏈表轉(zhuǎn)換成紅黑樹的邏輯等將在系列其他文章介紹。

轉(zhuǎn)載于:https://www.cnblogs.com/lwpimis/p/10572235.html

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的HashMap源码分析1:添加元素的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产69久久 | 波多野结衣中文字幕在线 | 久操网在线 | 欧美视频中文字幕 | 男人的天堂av女优 | av在线免费播放 | 欧美人xxx| 国产黄色免费网站 | 亚洲一级无毛 | 尤物国产精品 | 樱花视频在线观看 | 小泽玛利亚一区二区三区 | 一区不卡在线 | 少妇一夜三次一区二区 | 看片免费黄在线观看入口 | 国产午夜麻豆影院在线观看 | 欧美三日本三级少妇三 | 就操网 | 国产电影一区二区三区 | 黄色片不卡 | 日韩aa视频 | 欧美激情图区 | 欧美视频第一区 | 四虎影视最新网址 | 成人无码av片在线观看 | 高潮一区 | 99久久国产热无码精品免费 | 色小姐av| 五月天黄色网址 | 国产精品国产三级国产三级人妇 | 456亚洲影院| 国产一区二区激情视频 | 一区二区三区在线免费 | 蜜臀久久99精品久久一区二区 | 国产三级做爰高清在线 | 教练含着她的乳奶揉搓揉捏动态图 | 小镇姑娘高清播放视频 | 色眯眯网 | 韩国日本美国免费毛片 | 99热这里只有精品4 精品国产黄色 | 真实偷拍激情啪啪对白 | 成人福利午夜 | 野外一级片 | 欧美一区亚洲二区 | 午夜一区二区三区在线 | 日韩av少妇 | 18色av| 97成网| 99精品区| 日韩人妻无码精品综合区 | 三级自拍 | 青青草原伊人网 | 色在线看 | 天堂网av中文字幕 | 视频一区在线观看 | 四虎影 | 久久av免费 | 山村淫强伦寡妇 | 国产欧美精品一区二区 | 日韩一级片在线 | 完全免费在线视频 | 少妇av片| 国产精品一区二区电影 | 国产精品综合一区二区 | 黄色不卡视频 | 国产精品福利在线观看 | 亚洲熟女乱综合一区二区 | 日韩成人免费av | 日本人毛片| 亚洲精品电影在线观看 | 精品国产免费一区二区三区 | 日本福利在线 | 中文字幕在线看片 | www色网站| 啪啪网站视频 | 亚洲男人天堂2022 | 九九热这里都是精品 | 日韩一区二区三区视频在线 | 99精品在线观看视频 | 亚洲一区二区激情 | 亚洲精品福利在线观看 | jizzjizzjizz国产 | 国产成人精品综合久久久久99 | 日本私人影院 | www天堂av| 99热网址 | www.久草.com| 337p粉嫩大胆色噜噜狠狠图片 | 一区二区在线不卡 | 91午夜在线观看 | 青青艹在线视频 | 不卡的一区二区 | 99精品久久久久久久婷婷 | 偷偷操不一样 | 亚洲精品91天天久久人人 | 欧美日韩国产色 | 精品国产色 | 日日操日日爽 | 国产欧美成人 |