1.源码部分
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;
}
2.分析
主要意思是获取到输入cap参数最接近的2的整数幂
例如输入15对应二进制数据为0111
1.步骤1
n=cap-1 //0110 左2为最高位1
2. n |= n>>>1 //无符号右移1位 并做位或运算
0011
|0110
=011x //这里能保证2 3 位为1
3. n|=n>>>2;
0001
|011x
=0111 //到这里就能保证 234位都为1 之后的 4 8 16 也是如此 为了将int值32位全部走完
。。。。。
4.return时n+1即可获得最近的2的整数幂
参考链接: