// 初始化臨界值的具體實現
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 |