HashMap 中 get,put 方法原始碼實現
阿新 • • 發佈:2020-07-21
HashMap 是Map介面的一個實現類
1、執行緒 HashMap 非執行緒安全
2、資料儲存結構 hashMap採用Entity陣列來儲存 key-value對,每一個鍵值對組成一個Entity,鍵值對均允許為Null
3、資料結構 陣列+連結串列(JDK1.7之前);陣列+連結串列+紅黑樹(JDK1.8新增)
4、連結串列與紅黑樹之間的轉換 資料型別轉換的閾值,連結串列長度超過8的閾值後,就將連結串列結構轉成紅黑樹結構,當紅黑樹結構長度閾值小於6,自動轉成連結串列
5、 負載因子 0.75
6、初始化陣列容量大小 hashMap初始Entity[]陣列容量16,當容量達到閾值後,擴充的容量為bable的2倍,重新計算hash值
HashMap方法
1、HashMap繼承結構 AbstractMap是Map的實現類,HashMap通過繼承AbstractMap實現部分Map方法。
2、get(key) HashMap在獲取值時,首先通過Key計算Hash值,獲取表資料,根據hash值定位Entity元素,根據key值獲取相應的value值。
3、put(key,value)同樣先通過Key計算出hash值,作為陣列的下標;首先獲取記憶體中的資料,然後做了一系列的邏輯判斷。
這裡增加了一個紅黑樹轉換的判斷。 if (binCount >= TREEIFY_THRESHOLD - 1) // -1 for 1st