HashMap的擴容問題

2021-09-26 11:15:23 字數 421 閱讀 9960

hashmap的重要特性是它的容量(capacity)、負載因子(load factor)和擴容極限(threshold resizing)。

當hashmap中的元素個數 > 陣列大小 乘以 load factor(負載因子預設為0.75)時,陣列就會擴容。

hashmap擴容是非常消耗效能的操作,預設元素的個數能有效提高hashmap的效能。

預設hashmap的大小時,需要考慮到負載因子的因素。

// 假設hashmap 需要儲存1000個元素,那麼需要使用

map map = new hashmap(2048);

// 或者指定hashmap的負載因子為1

map map = new hashmap(1000,1);

hashMap擴容機制

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

HashMap擴容機制

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

HashMap擴容閾值

閾值 容量 x 負載因子,假設當前hashmap的容量是 16,負載因子是預設值 0.75,那麼當 size 到達16 x 0.75 12 的時候,就會觸發擴容。ps 初始化時,若指定的初始大小不是按照要求來的 則取數字最近的符合規則的數字 將傳過來的引數值轉換為最接近 且大於等於指定引數的 2 的...