tableSizeFor(int cap)方法详解

//    初始化临界值的具体实现
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

你可能感兴趣的:(问题解决)