// 初始化临界值的具体实现
static final int tableSizeFor(int cap) {
int n = cap - 1;
n |= n >>> 1;//现将n无符号右移1位,并将结果与右移前的n做按位或操作,结果赋给n;
n |= n >>> 2;
n |= n >>> 4;
n |= n >>> 8;
n |= n >>> 16;
//中间过程的目的就是使n的二进制数的低位全部变为1,比如10,11变为11,100,101,110,111变为111;
return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
}
先说这个方法在结果上的体现就是,检查所传的参数是否为2的幂次方,且不能为负数(负数变为1),且不能超过常量MAXIMUM_CAPACITY(超过变为MAXIMUM_CAPACITY),如果不为2的幂次方,将其变为,比cap大的最小的2的幂次方的值;举个例子
参数 | 返回值 |
---|---|
0 | 1 |
1 | 1 |
2 | 2 |
3 | 4 |
4 | 4 |
5 | 8 |
10 | 16 |
100 | 128 |
1000 | 1024 |
1<<31 | 1<<30(MAXIMUM_CAPACITY) |
-1 | 1 |