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,如果还有这么多位的话。

最新文章

  1. 转载——C++控制台贪吃蛇代码
  2. 模式窗口刷新不弹出新窗口触发NET事件
  3. UIWebView相关设置
  4. 网页元素定位神器之Xpath详解
  5. Sina App Engine(SAE)入门教程(10)- Cron(定时任务)使用
  6. Agri-Net poj 1258
  7. Hibernaate事务管理
  8. NSTimer你真的会用了吗
  9. POST和Get辨析
  10. 如何在IIS8.5上面部署php
  11. 12 week work
  12. 浅谈HTTP Keep-Alive
  13. 洛谷P4135 作诗
  14. SpringBoot添加对Mybatis的支持
  15. MSXML4 SP2 sp3安装时出错
  16. The difference between the request time and the current time is too large.阿里云oss上传图片报错
  17. Linux系统查找清理磁盘大文件方法
  18. docker 创建镜像,并推送到私有仓库
  19. linux 运维基础之VM中安装centos6.X
  20. JTAG与JLink说明

热门文章

  1. 1.1.18 Word里将“字体加红”自定义为快捷方式
  2. socket资源
  3. linux tomcat jvm调优
  4. Excel技巧--实现交叉查询
  5. Lucene的基本使用
  6. Pod配置PersistentVolumeClaim详解
  7. docker容器内存占用 之 系统cache,docker下java的内存该如何配置
  8. C++Primer第五版——习题答案详解(一)
  9. Java构造器练习题
  10. CVE-2017-16995 漏洞利用