tableSizeFor

HashMap

tableSizeFor()

/**
      Returns a power of two size for the given target capacity.
      1.(不考虑大于最大容量的情况)返回大于输入参数且最近的2的整数次幂的数。比如10,则返回16.
      2. 该算法让最高位的1后面的位全变为1;最后再让结果n+1,即得到了2的整数次幂的值了。
      3. >>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0.
         比如7的二进制是111,7>>>2表示右移2位,变成001,即为1.
*/
    static final int MAXIMUM_CAPACITY = 1 << 30;
    static final int tableSizeFor(int cap) {
        int n = cap - 1;
        n |= n >>> 1;  //相当于 n = ( 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; //最后算+1
    }
posted @ 2021-02-03 17:30  先生胡  阅读(112)  评论(0编辑  收藏  举报