一般如果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為例:

