總結 HashMap的擴容機制

2021-09-02 16:44:27 字數 702 閱讀 5540

jdk1.7 hashmap擴容原理:

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

【缺點】:

(1)擴容後每個元素需要重新計算hash。

(2) 鍊錶中元素順序 每次遷移後被倒置。

jdk1.8 hashmap擴容策略:

【想法】:hashmap是先插入然後再擴容,有的時候我們可能會想如果先增加資料總量,在併發執行緒中萬一資料還沒有寫完,就被讀取到了,相當於髒資料了,但是想一下hashmap本身就是執行緒不安全的,併發中使用hashmap本身就會有很多問題。

【原理】:1.8中在擴容hashmap的時候,不需要像1.7中去重新計算元素的hash,只需要看看原來的hash值新增的哪個二進位制數是1還是0就好了,如果是0的話表示索引沒有變,是1的話表示索引變成「oldcap+原索引」,這樣即省去了重新計算hash值的時間,並且擴容後鍊錶元素位置不會倒置。

【繼續整理學習,總結中………………】

hashMap擴容機制

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

HashMap擴容機制

當map元素容量超過設定的閾值threshold capacity loadfactor時進行擴容,如下圖所示 原理 建立更大容量的新陣列,重新計算每個元素在新陣列中的位置進行遷移。缺點 每個元素需要重新計算hash 鍊錶中元素順序每次遷移後被倒置 原理 在擴充hashmap的時候,不需要像jdk1...

HashMap的擴容機制 resize

hashmap底層邏輯 當我們往hashmap中put元素的時候,先根據key的hash值得到這個元素在陣列中的位置 即下標 然後就可以把這個元素放到對應的位置中了。如果這個元素所在的位子上已經存放有其他元素了,那麼在同乙個位子上的元素將以鍊錶的形式存放,新加入的放在鏈頭,最先加入的放在鏈尾。從ha...