博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HashMap中数组初始化的秘密
阅读量:6720 次
发布时间:2019-06-25

本文共 526 字,大约阅读时间需要 1 分钟。

hot3.png

我们知道,在新建一个HashMap对象时,无论传的initialCapacity参数值为多少,最总HashMap中数组的长度始终为2的n次方,代码如下:

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

>>>表示忽略符号右移,不足补0

假设cap的值为10,那么n的值为9,对应二进制值为1001 经过n |= n >>> 1;计算,此时n对应的二进制值为1101 经过n |= n >>> 2;计算,此时n对应的二进制值为1111 依次类推,最后n对应的二进制的值为1111,对应十进制为15 根据最后的三元运算,该方法的返回值为16,也就是2的4次方

转载于:https://my.oschina.net/u/436693/blog/1845017

你可能感兴趣的文章
服务器操作系统之Solaris架构攻略
查看>>
java——演示封装的思想
查看>>
直接使用提交过来的类来更新字段EntityState.Modified并过滤null值的方法
查看>>
美团在Redis上踩过的一些坑-5.redis cluster遇到的一些问题
查看>>
浅谈JAVA的线程安全与性能之间的权衡
查看>>
python入门系列之一:Centos6下python2.7的安装
查看>>
31.软连接
查看>>
oracle 11g 手工热备-数据库
查看>>
跟我一起数据挖掘(17)——分布式缓存
查看>>
python paramiko 执行命令
查看>>
centos7安装
查看>>
docker强制删除none的image镜像
查看>>
JavaScript学习
查看>>
Linux下通用二进制安装包安装MySQL-5.6.37
查看>>
简单跳板机的搭建笔记
查看>>
Verizon宣布2018年将部署全国性NB-IoT网络
查看>>
python 十六进制转换十进制(MAC 转换 IP 地址)
查看>>
opensips使用加密密码认证
查看>>
静态元素过期时间
查看>>
php 解决乱码问题
查看>>