HashMap中数组初始化的秘密
2019独角兽企业重金招聘Python工程师标准>>>
我们知道,在新建一个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
HashMap中数组初始化的秘密相关推荐
- 2020-08-17:为什么HashMap中数组的容量为2的次幂?
2020-08-17:为什么HashMap中数组的容量为2的次幂? 前言 为什么HashMap中数组的容量为2的次幂? 前言 每日一题专栏 为什么HashMap中数组的容量为2的次幂? 因为在插入元素 ...
- java类初始数组_java中数组初始化的三种方式是什么
java中数组初始化的三种方式是:1.静态初始化,如[int a[] = {2, 0, 1, 9, 2020}]:2.动态初始化,如[int[] c = new int[4]]:3.默认初始化,如[i ...
- C++中数组初始化方法
定义: int *pia = new int[10]; // array of 10 uninitialized ints 此 new 表达式分配了一个含有 10 个 int 型元素的数组,并返回指向 ...
- c语言long型数组怎么初始化,C语言中数组初始化的三种方式是什么?
C语言中,数组初始化的方式主要有三种: 1.声明时,使用 {0} 初始化: 2.使用memset: 3.用for循环赋值. 那么,这三种方法的原理以及效率如何呢? 请看下面的测试代码:#define ...
- C语言中的结构体,结构体中数组初始化与赋值
最近写c语言中的结构体遇到了些问题,从网上找了些资料如下: 结构体是连续存储的,但由于结构体中成员类型各异,所以会存在内存对齐问题,也就是内存里面会有空档,具体的对齐方式这里 暂不讨论: 1.结构体的 ...
- c++、c中数组初始化默认值如何为0
做全局变量 int sum[1000006];//初始化设默认值为0 做局部变量 默认值只能设为0,且只有在初始化时,才能设为0(sum[100]={0};这么写就是错的): 如果设为1,则只是sum ...
- Java中数组怎么初始化?数组初始化方法
关于Java中数组怎么初始化的文章早已是非常多了,本文是对我个人过往学习Java,理解及应用Java数组的一个总结.此文内容涉及Java中数组初始化的三大方法等相关问题,希望对大家有所帮助. Java ...
- c的关于数组初始化 和 memset用法
今天为了彻底搞定一个关于c中数组初始化和声明不同情况下,比如只声明一个数组char str[20];那么这str里面是什么内容呢?我用vc6++,debug下看到都是-56饿asc码,后来请教了一个华 ...
- HashMap中的hash算法的几个思考
HashMap中哈希算法的关键代码 //重新计算哈希值 static final int hash(Object key) {int h;return (key == null) ? 0 : (h = ...
最新文章
- IEEE signal processing letters 投稿经验
- 网络安全系列之五十二 组策略中的软件限制策略
- 成功的自动化测试实施的5大支柱(译)
- 剑指offer:分行从上往下打印二叉树
- SSH之Hibernate总结篇
- 全连接神经网络_二十九.全连接神经网络原理
- AnalogClock和DigitalClock时间和日期控件
- linux系统rootkit恶意软件安全检测工具rkhunter安装部署、使用详解
- 自动驾驶算法-滤波器系列(六)——10+种经典滤波算法
- 【更改google chrome浏览器路径的方法】
- 这件小事,我坚持了 200 天
- 小学计算机机器人大赛,2019年花都区中小学电脑机器人竞赛活动
- 关于微信开放平台配置-网站应用
- 记录在APIO2019前
- Mac上的QQ字体大小和颜色如何设置
- python数据提取和合并_用Python提取和合并Excel数据
- NBA季后赛总抢断排行榜(数据截止至11年5月5日)
- Win10忘记开机密码无法进入桌面怎么办?
- 简单python项目实例-python实战项目
- Android开发 —— apk打包流程
热门文章
- 计算机专业毕业论文指导记录详细,毕业论文指导记录怎么写 了解一下
- 打开软件就遍历桌面和D盘的软件名通过UDP广播的方式发出。服务器监听指定的端口可以获得文件夹名称。不会暴露自己的IP
- java 对象序列化 数组_序列化-将任何对象转换为j中的字节数组
- html淡化效果,jQuery实现基本淡入淡出效果的方法详解
- mysql alter table if_MySQL中的alter table命令的基本使用方法及提速优化
- leetcode892. 三维形体的表面积
- leetcode169. 多数元素
- UNIX(多线程):23---线程池注意事项和常见问题
- 算法(18)-leetcode-剑指offer2
- c++基础学习(03)--(存储类,运算符,循环,判断)