1. 程式人生 > 其它 >hashmap底層原理

hashmap底層原理

1 HashMap的內部資料結構

陣列 + 連結串列/紅黑樹

2 HashMap允許空鍵空值麼

HashMap最多隻允許一個鍵為Null(多條會覆蓋),但允許多個值為Null

3 影響HashMap效能的重要引數

初始容量:建立雜湊表(陣列)時桶的數量,預設為 16 負載因子:雜湊表在其容量自動增加之前可以達到多滿的一種尺度,預設為 0.75

4 HashMap的工作原理

HashMap是基於hashing的原理,我們使用put(key, value)儲存物件到HashMap中,使用get(key)從HashMap中獲取物件

5 HashMap為什麼要引入紅黑樹

引入紅黑樹資料結構是為了解決連結串列O(n)的時間複雜度,由於連結串列不支援索引,要想在連結串列中找一個元素就需要遍歷一遍連結串列,那顯然效率是比較低的。達到一定條件時(連結串列長度8),連結串列就會轉變紅黑樹。


6 擴容

陣列容量是有限的,如果資料多次插入併到達一定的數量就會進行陣列擴容,也就是resize 方法。如果當前存入的資料數量大於 Capacity * LoadFactor 的時候,就會進行陣列擴容 resize。就比如當前的 HashMap 的最大容量大小為 100,當你存進第 76 個的時候,判斷髮現需要進行 resize了,那就進行擴容。

1)Capacity:HashMap 當前最大容量/長度

2)LoadFactor:負載因子,預設值0.75f

擴容 resize 分為兩步

1)擴容:建立一個新的 Entry/Node 空陣列,長度是原陣列的 2 倍

2)ReHash:遍歷原 Entry/Node 陣列,把所有的 Entry/Node 節點重新 Hash 到新陣列