ConcurrentHashMap思維導圖(1.8版本)

思維導圖

ConcurrentHashMap

核心操作

put

主要步驟:
1、判斷key或者value是否爲null,是的話拋出異常;
2、計算key的hashcode;
3、判斷容器table是否爲null,或者長度爲0,是的話進行初始化工作;
4、定位key所在的位置,如果此位置沒有元素的話,通過cas方式插入元素,直到成功;
5、如果有元素的話,判斷此時是否在擴容,如果是的話,幫助一起擴容(多個線程一起搞,這個過程挺複雜的。。);
6、否則的話,通過synchronized加鎖方式插入元素,加鎖後進行雙重檢驗,看頭結點元素是否變了,變了的話重新進行插入操作,否則的話判斷當前結構是鏈表結構還是紅黑樹結構,然後以不同的方式進行插入操作。
7、插完元素後,判斷是否需要進行鏈表往樹的轉換工作,如果不需要,僅僅簡單的擴容(2 * oldCapacity),否則的話進行鏈表往紅黑樹的轉換工作。

get

主要步驟:
1、計算key的hash值
2、判斷容器是否有元素,且根據key的hash計算的索引位置也有值,滿足條件的話則進行接下來的查找工作;
3、首先判斷第一個元素是否滿足,滿足的話直接返回值;
4、判斷是鏈表結構還是紅黑樹結構,執行相應的查找過程

size

主要步驟:
1、直接調用sumCount方法即可得到元素的個數,容器在插入和刪除操作時維護了一個每個索引處元素的個數,調用sumCount將每一個位置處的元素個數相加即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章