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中数组初始化的秘密相关推荐

  1. 2020-08-17:为什么HashMap中数组的容量为2的次幂?

    2020-08-17:为什么HashMap中数组的容量为2的次幂? 前言 为什么HashMap中数组的容量为2的次幂? 前言 每日一题专栏 为什么HashMap中数组的容量为2的次幂? 因为在插入元素 ...

  2. java类初始数组_java中数组初始化的三种方式是什么

    java中数组初始化的三种方式是:1.静态初始化,如[int a[] = {2, 0, 1, 9, 2020}]:2.动态初始化,如[int[] c = new int[4]]:3.默认初始化,如[i ...

  3. C++中数组初始化方法

    定义: int *pia = new int[10]; // array of 10 uninitialized ints 此 new 表达式分配了一个含有 10 个 int 型元素的数组,并返回指向 ...

  4. c语言long型数组怎么初始化,C语言中数组初始化的三种方式是什么?

    C语言中,数组初始化的方式主要有三种: 1.声明时,使用 {0} 初始化: 2.使用memset: 3.用for循环赋值. 那么,这三种方法的原理以及效率如何呢? 请看下面的测试代码:#define ...

  5. C语言中的结构体,结构体中数组初始化与赋值

    最近写c语言中的结构体遇到了些问题,从网上找了些资料如下: 结构体是连续存储的,但由于结构体中成员类型各异,所以会存在内存对齐问题,也就是内存里面会有空档,具体的对齐方式这里 暂不讨论: 1.结构体的 ...

  6. c++、c中数组初始化默认值如何为0

    做全局变量 int sum[1000006];//初始化设默认值为0 做局部变量 默认值只能设为0,且只有在初始化时,才能设为0(sum[100]={0};这么写就是错的): 如果设为1,则只是sum ...

  7. Java中数组怎么初始化?数组初始化方法

    关于Java中数组怎么初始化的文章早已是非常多了,本文是对我个人过往学习Java,理解及应用Java数组的一个总结.此文内容涉及Java中数组初始化的三大方法等相关问题,希望对大家有所帮助. Java ...

  8. c的关于数组初始化 和 memset用法

    今天为了彻底搞定一个关于c中数组初始化和声明不同情况下,比如只声明一个数组char str[20];那么这str里面是什么内容呢?我用vc6++,debug下看到都是-56饿asc码,后来请教了一个华 ...

  9. HashMap中的hash算法的几个思考

    HashMap中哈希算法的关键代码 //重新计算哈希值 static final int hash(Object key) {int h;return (key == null) ? 0 : (h = ...

最新文章

  1. IEEE signal processing letters 投稿经验
  2. 网络安全系列之五十二 组策略中的软件限制策略
  3. 成功的自动化测试实施的5大支柱(译)
  4. 剑指offer:分行从上往下打印二叉树
  5. SSH之Hibernate总结篇
  6. 全连接神经网络_二十九.全连接神经网络原理
  7. AnalogClock和DigitalClock时间和日期控件
  8. linux系统rootkit恶意软件安全检测工具rkhunter安装部署、使用详解
  9. 自动驾驶算法-滤波器系列(六)——10+种经典滤波算法
  10. 【更改google chrome浏览器路径的方法】
  11. 这件小事,我坚持了 200 天
  12. 小学计算机机器人大赛,2019年花都区中小学电脑机器人竞赛活动
  13. 关于微信开放平台配置-网站应用
  14. 记录在APIO2019前
  15. Mac上的QQ字体大小和颜色如何设置
  16. python数据提取和合并_用Python提取和合并Excel数据
  17. NBA季后赛总抢断排行榜(数据截止至11年5月5日)
  18. Win10忘记开机密码无法进入桌面怎么办?
  19. 简单python项目实例-python实战项目
  20. Android开发 —— apk打包流程

热门文章

  1. 计算机专业毕业论文指导记录详细,毕业论文指导记录怎么写 了解一下
  2. 打开软件就遍历桌面和D盘的软件名通过UDP广播的方式发出。服务器监听指定的端口可以获得文件夹名称。不会暴露自己的IP
  3. java 对象序列化 数组_序列化-将任何对象转换为j中的字节数组
  4. html淡化效果,jQuery实现基本淡入淡出效果的方法详解
  5. mysql alter table if_MySQL中的alter table命令的基本使用方法及提速优化
  6. leetcode892. 三维形体的表面积
  7. leetcode169. 多数元素
  8. UNIX(多线程):23---线程池注意事项和常见问题
  9. 算法(18)-leetcode-剑指offer2
  10. c++基础学习(03)--(存储类,运算符,循环,判断)