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为例:


浙公网安备 33010602011771号