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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ConcurrentHashMap的源码分析-put方法第四阶段

發(fā)布時間:2024/4/13 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ConcurrentHashMap的源码分析-put方法第四阶段 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這個方法的主要作用是,如果被添加的節(jié)點的位置已經(jīng)存在節(jié)點的時候,需要以鏈表的方式加入到節(jié)點中?

如果當前節(jié)點已經(jīng)是一顆紅黑樹,那么就會按照紅黑樹的規(guī)則將當前節(jié)點加入到紅黑樹中

else { //進入到這個分支,說明f是當前nodes數(shù)組對應位置節(jié)點的頭節(jié)點,并且不為空 V oldVal = null; synchronized (f) { //給對應的頭結(jié)點加鎖 if (tabAt(tab, i) == f) {//再次判斷對應下標位置是否為f節(jié)點 if (fh >= 0) { //頭結(jié)點的hash值大于0,說明是鏈表 binCount = 1; //用來記錄鏈表的長度 for (Node<K,V> e = f;; ++binCount) {//遍歷鏈表 K ek; //如果發(fā)現(xiàn)相同的key,則判斷是否需要進行值的覆蓋 if (e.hash == hash && ((ek = e.key) == key || (ek != null && key.equals(ek)))) { oldVal = e.val; if (!onlyIfAbsent) //默認情況下,直接覆蓋舊的值 e.val = value; break; } //一直遍歷到鏈表的最末端,直接把新的值加入到鏈表的最后面 Node<K,V> pred = e; if ((e = e.next) == null) { pred.next = new Node<K,V>(hash, key, value, null); break; } } } //如果當前的f節(jié)點是一顆紅黑樹 else if (f instanceof TreeBin) { Node<K,V> p; binCount = 2; //則調(diào)用紅黑樹的插入方法插入新的值 if ((p = ((TreeBin<K,V>)f).putTreeVal(hash, key, value)) != null) { oldVal = p.val; //同樣,如果值已經(jīng)存在,則直接替換 if (!onlyIfAbsent) p.val = value; } } } }

?

總結(jié)

以上是生活随笔為你收集整理的ConcurrentHashMap的源码分析-put方法第四阶段的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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