HashMap擴容機制

2021-08-17 01:47:14 字數 733 閱讀 4889

當map元素容量超過設定的閾值threshold=capacity * loadfactor時進行擴容,如下圖所示:

原理:建立更大容量的新陣列,重新計算每個元素在新陣列中的位置進行遷移。

缺點:

每個元素需要重新計算hash;

鍊錶中元素順序每次遷移後被倒置;

原理:在擴充hashmap的時候,不需要像jdk1.7的實現那樣重新計算hash,只需要看看原來的hash值新增的那個bit是1還是0就好了,是0的話索引沒變,是1的話索引變成「原索引+oldcap」,可以看看下圖為16擴充為32的resize示意圖:

優點:

不需要像jdk1.7的實現那樣重新計算hash;

鍊錶中元素順序保持不變;

參考:

hashMap擴容機制

擴容時空間大小變化 hashmap中,雜湊桶陣列table的長度length大小必須為2的n次方 一定是合數 這是一種非常規的設計,常規的設計是把桶的大小設計為素數。相對來說素數導致衝突的概率要小於合數,具體證明可以參考 hashtable初始化桶大小為11,就是桶大小設計為素數的應用 hashta...

HashMap儲存機制及擴容

首先要說的是hashmap的底層資料結構是陣列 鍊錶的結構。hashmap中有乙個entry內部類,內部類有幾個屬性 key,value,hash,next。hashmap中的陣列其實也就是entry陣列。hashmap的初始容量是16,如果賦值初始容量的話,也是會自動變成2的冪這種大小的。為什麼需...

HashMap擴容機制之雜談

1 hashmap的rehash將明顯耗效能,所以需要盡量避免rehash操作,我們需要做的是夠控制好預設初容量大小capacity和載入因子factory 即是hashmap中hash表中元素填滿的程度 比如可根據業務來定義,我們知道hashmap中的key和value大概可以存一w對以上,但是我...