zoukankan      html  css  js  c++  java
  • HashMap的tableSizeFor方法解读

    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;
        }
    tableSizeFor

    ...01***...

    n |= n >>> 1;//让n从左边开始,第一个为1的数之后(包括第一个)的两位数都为1    ...011***...
    n |= n >>> 2;//让n从左边开始,第一个为1的数之后(包括第一个)的四位数都为1    ...01111***...
    n |= n >>> 4;//让n从左边开始,第一个为1的数之后(包括第一个)的八位数都为1    ...011111111***...
    n |= n >>> 8;//让n从左边开始,第一个为1的数之后(包括第一个)的十六位数都为1   ...01111111111111111***...
    n |= n >>> 16;//让n从左边开始,第一个为1的数之后(包括第一个)的三十二位数都为1  ...011111111111111111111111111111111***...

    让n的二进制表示,从左边开始,第一个为1的数之后的32位数都为1,如果还有这么多位的话。

  • 相关阅读:
    HTML基础 整理
    今天课堂总结
    课后习题
    JAVA的文件创建
    JAVA_输入输出流 异常处理
    12.23流水账号
    12.22 repeater 删除
    12.22 repeater 修改
    12.22 repeater 添加
    12.22 repeater 主页
  • 原文地址:https://www.cnblogs.com/liaozhenghan/p/9835610.html
Copyright © 2011-2022 走看看