hashmap底層原理
阿新 • • 發佈:2022-11-29
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 到新陣列