java8 hashmap擴容機制


默認情況下HashMap的容量是16,如果用戶通過構造函數指定了一個數字作為容量,那么Hash會選擇大於該數字的第一個2的冪作為容量。(3->4、7->8、9->16)

如果map在put的時候發現超過闕值的時候就會產生擴容:

  闕值 = 負載因子 * 容量

threshold = loadFactor * capacity

所以我們知道map里存放的個數時候,new的構造函數的設置值應該利用公式 = (需要存儲的個數 / 負載因子)+ 1

比如map里要存放16個元素

(16 / 0.75) + 1 = 22

Map<String, String> map = new HashMap<String, String>(22);
// int n = cap - 1;
// n |= n >>> 1;
// n |= n >>> 2;
// n |= n >>> 4;
// n |= n >>> 8;
// n |= n >>> 16;
// return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
map容量變成24
闕值 = 24 * 0.75 = 18
此時我們存放16個元素就不會觸發擴容

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM