HashMap初始容量的設置方法


一般如果new HashMap() 不傳值,默認大小是16,負載因子是0.75, 如果自己傳入初始大小k,初始化大小為 大於等於k的 ,最接近k的2的整數次方,例如如果傳10,大小為16。

實現代碼如下:

static final int tableSizeFor(int cap) {
  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;
}

注釋:MAXIMUM_CAPACITY為HashMap最大容量:1 << 30

下面來分析上述代碼為什么能夠實現返回大於等於cap的且最接近cap的2的整數次方,分為以下兩種情況進行討論:

1. cap值原本就為2的整數次方,那應當返回原值,我們以32為例:

2.cap值不是2的整數次方,應當大於cap且距離cap最近的2的整數次方,我們以50為例:


免責聲明!

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



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