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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章