/**
     * Returns a power of two size for the given target capacity.
     */
    static final int tableSizeFor(int cap) {
        int n = cap - 1;
        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;
    }

代码是这样子,效果是为了获取一个2的指数大小的目标大小。

这里运算有一个重要的概念:

2进制的数,如果任意位都为1,如:111111,这样的数 +1后,会变成:1000000,而这个数必为2的指数。

 

所以,这个方法设计的时候,首先要考虑的是得到一个1111111这样的数,然后要加1。

然后还有一点,加入cap这个传进来的容量,就是一个2的指数呢?

这个时候,比如,传入的是2,结果会得到4,传入4,得到8,这样子就造成浪费,也与使用者的意图不符。

>>> 代表无符号右移,在正数的时候和>>是一样的。

 

相关文章:

  • 2021-07-26
  • 2021-09-26
  • 2021-04-16
  • 2022-01-10
  • 2021-10-25
  • 2021-10-13
  • 2021-05-31
  • 2021-05-22
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-01-06
  • 2021-11-02
  • 2021-05-29
  • 2022-12-23
  • 2021-10-23
相关资源
相似解决方案