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次幂的整数,比如输入5,会输出8
cap=0101
n=0100
无符号右移1位0010 经过异或运算后---》0110
无符号右移2位0001 经过异或运算后--》0111
无符号右移4位 0000 经过异或运算后-》》0111
。。。。
最后经过右移和异或运算后得出来是0111
最后+1 得1000=8
|