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
}

最新文章

  1. [liusy.api-SMJ]-MAVEN archetype 创建项目
  2. hibernate配置文件详细解析
  3. oracle 学习
  4. iOS-JavaScript向WKWebView传值
  5. 理解Bitcode
  6. thinkphp添加后台的构思以及添加数据功能
  7. [ CodeVS冲杯之路 ] P3955
  8. 006 列表的三种删除方法 remove,pop,del
  9. 移动端影像解决方案Adobe Creative SDK for ios
  10. 使用JSP实现商场购物车模块
  11. 实现DataGridView行的拖动,即实现行的顺序交换
  12. spark中数据的读取与保存
  13. Angular通过订阅观察者对象实现不同组件中数据的实时传递
  14. [Linux]_ELVE_ssh登录远程阿里服务器
  15. pwnable.kr-fd-witeup
  16. React篇-子组件调用父组件方法,并传值
  17. 通过PMP考试
  18. docker-compose.md
  19. Qt自定义控件大全(一)云台仪表盘控件
  20. delphi修改QQ快捷方式的目标地址达到在启动QQ的同时也能运行自己想要启动的EXE可执行文件

热门文章

  1. Python学习笔记.md
  2. Python 康德乐大药房网站爬虫,使用bs4获取json,导入mysql
  3. NodeJs学习日报day7——简单中间件
  4. 简易table form梳理
  5. Caused by: com.sonatype.nexus.staging.client.StagingRuleFailuresException: Staging rules failure! 已解决!
  6. Dom基础(三):事件冒泡,事件委托(事件代理)和事件捕获
  7. -2.输入加速(cin,cout)
  8. Jenkins 自动化部署详解
  9. 单列集合(Collection-List)
  10. kubevirt在360的探索之路(k8s接管虚拟化)