原始碼擴容及HashMap樹化

2021-10-07 02:19:04 字數 599 閱讀 4186

對於hashmap初始容量為16

負載因子為0.75

最小樹化長度為64

當前鍊錶的長度大於8時進行樹化,轉化為紅黑樹,進入樹化方法則會發現,樹化之前會先進性判斷,陣列的長度如果小於64則會先進行擴容。擴容的方式就是建立新的陣列(陣列長度並不能變),將老元素重新新增到新的陣列中。

for

(int bincount =0;

;++bincount)

進入treeifybin樹化方法會發現,陣列新進行擴容判斷,不可擴容才樹化。

//首先判斷是否超過最小樹化長度64(下標從0開始)

if(bincount >= treeify_threshold -1)

// -1 for 1st

treeifybin

(tab, hash)

;//小於則進行擴容 ,將陣列擴容到64

if(tab == null ||

(n = tab.length)

< min_treeify_capacity)

resize()

;

HashMap原始碼 擴容resize方法

環境 jdk1.8 resize方法原始碼如下 final node resize 初始化新容量值為舊容量值的2倍,然後與最大容量值比較,當新容量值小於最大容量值,且舊容量值大於等於預設初始化容量值,這時也對新閾值賦值為舊閾值的2倍 else if newcap oldcap 1 maximum c...

原始碼解析 HashMap擴容 紅黑樹單獨講

1.擴容的方法如下,主要幹這幾件事情,第一件,算出新陣列長度和新陣列擴容閾值,建立新陣列。第二件,擴容前的陣列元素遷移到擴容後的陣列當中去。主要分為單個元素的遷移,鍊錶的遷移,紅黑樹的遷移 下期再講 下面我們依次來看一下hashmap它是怎麼玩的吧。首先我們看下新陣列長度和新陣列擴容閾值是怎麼算出來...

HashMap原始碼分析及底層原理

原始碼分析 總結 hashmap map new hashmap i預設情況下,先不建立長度為16的陣列 當首次呼叫map.put 時,再建立長度為16的陣列 陣列為node型別,在jdk7中稱為entry型別 形成鍊錶結構時,新新增的key value對在鍊錶的尾部 七上八下 當陣列指定索引位置的...