HashMap擴容機制之雜談

2021-09-02 13:49:24 字數 613 閱讀 9753

1、hashmap的rehash將明顯耗效能,所以需要盡量避免rehash操作,我們需要做的是夠控制好預設初容量大小capacity和載入因子factory(即是hashmap中hash表中元素填滿的程度)。

比如可根據業務來定義,我們知道hashmap中的key和value大概可以存一w對以上,但是我們定義一萬的預設初始容量(factory定義為1),那樣我們就浪費記憶體了,所以我們可以根據業務的大小來定義初始預設值

在比如我們在查詢select * from t_table 我們知道rowcout 大概是30r 那麼我們可以將hashmap(30,1)來初始化預設值。

2、hashmap的初始容量大小為16  最大為1<<30(即2的30次方),載入因子為0.75,所以當容量大於16*0.75=12的時候那麼就會rehash一次,容量*2。所以定義初始容量和定義載入因子是有需要的

3、hashmap 裡是用陣列進行儲存,每個陣列元素是鏈性結構,鍊錶主要為作用是為了防止hashmap的key重複衝突的,我們都知道hashmap都會為key值進行hash運算,但是hash會有重複的,所以我們就用鍊錶進行消除,怎麼消除呢?檢視原始碼中有entry next 這個,當計算到重複了,那好,將新的值也存放到重複的地方,然後將原來的存放到下乙個儲存位置

hashMap擴容機制

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

HashMap擴容機制

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

HashMap儲存機制及擴容

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