tableSizeFor
是一個靜態方法,用來確保 HashMap 的容量是一個大于等于給定參數的最小的 2 的冪次方。這個方法的實現如下:
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;
}
在 HashMap 的實現中,當元素的數量超過了負載因子(默認為 0.75)乘以當前容量時,就會觸發擴容操作。擴容會創建一個新的更大的數組,將原數組中的元素重新計算哈希值并放入新數組中。
擴容機制的實現如下:
因此,tableSizeFor
方法用來計算 HashMap 的容量,而擴容機制則是確保 HashMap 在容量不足時能夠及時擴容以保證性能。