从网上学一下HashMap扩容为什么是2的倍数

1.7查询放的索引值

    /*** Returns index for hash code h.*/static int indexFor(int h, int length) {// assert Integer.bitCount(length) == 1 : "length must be a non-zero power of 2";return h & (length-1);}

1.8 resize值放入的里面涉及到了h & (length-1);逻辑

 newTab[e.hash & (newCap - 1)] = e;

1.8 put 涉及到的逻辑

if ((p = tab[i = (n - 1) & hash]) == null)tab[i] = newNode(hash, key, value, null);

根据参考的逻辑
(n - 1) & hash = hash % n 主要是取代%去取模才是使用2的倍数的原因,&比%快很多

且当是2的倍数时,length-1的二进位是
当是16时,15的二进位是1111
当是32位时,31的二进位是11111
确保最后的数字统一为1,
当&的时候减少碰撞

15索引位置为15

如果将末尾的一个数字改成0
1111->1110

则15和14的索引位置在14上面
冲突的概率会加大

参考地址

为什么hashMap的容量扩容时一定是2的幂次
HashMap:为什么容量总是为2的次幂

HashMap扩容为什么是2的倍数相关推荐

  1. Java之HashMap系列--HashMap扩容的原理

    原文网址:Java之HashMap系列--HashMap扩容的原理_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Java的HashMap是如何扩容的. 重要大小 类 初始容量 最大容量 扩容 ...

  2. HashMap扩容流程

    文章目录 为什么扩容? 什么时候扩容? 如何扩容? 今天在和同时讨论HashMap的时候,提到了扩容和冲哈希的事情,然后我发现大家都是一种半懂不懂的状态.于是回去做了一番功课,写下这篇文章. Hash ...

  3. Btrace详细指南(JDK7,监控HashMap扩容)

    背景     JAVA中如何排查疑难杂症,如何动态获取应用信息,我们有BTrace! PS:集团有大杀器arthas,这里我们先从最原始最广泛的BTrace开始,后面可以玩玩Greys(开源,强于BT ...

  4. hashmap扩容 面试_HashMap面试,看完这一篇就够了(上)

    以下HashMap源码的解析都是基于java8来讲解的. HashMap的结构是数组加链表的形式(jdk7中也是),在java8中引入了红黑树,由于红黑树的时间复杂度是O(log n),引入红黑树是为 ...

  5. hashmap扩容机制_图文并茂:HashMap经典详解!

    点击上方 Java后端,选择 设为星标 优质文章,及时送达 代码中的注解多看几遍,其中HashMap的扩容机制是要必懂知识!结合图片一起理解! 什么是 HashMap? HashMap 是基于哈希表的 ...

  6. hashmap扩容线程安全问题_HashMap在1.7 1.8中的线程安全问题

    HashMap的线程不安全主要体现在下面两个方面: 在JDK1.7中,当并发执行扩容操作时会造成环形链和数据丢失的情况. 在JDK1.8中,在并发执行put操作时会发生数据覆盖的情况. ? ? 常被问 ...

  7. hashmap扩容机制_图文并茂,HashMap经典详解!

    Java面试笔试面经.Java技术每天学习一点 公众号Java面试 关注我不迷路 作者:feigeswjtu 来源:https://github.com/feigeswjtu/java-basics ...

  8. hashmap扩容_面试官问:HashMap在并发情况下为什么造成死循环?一脸懵

    这个问题是在面试时常问的几个问题,一般在问这个问题之前会问Hashmap和HashTable的区别?面试者一般会回答:hashtable是线程安全的,hashmap是线程不安全的. 那么面试官就会紧接 ...

  9. 聊一聊不同技术栈中hashmap扩容机制

    前言 hash简介 作为后端开发,说HashMap是我们最经常接触到的数据结构都不为过,而HashMap如其名最主要依赖的算法就是hash散列算法来存储和读取数据.         以关键码值K为自变 ...

最新文章

  1. CMD 输入中文看不到输入法的解决方法
  2. php删除修改例,PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
  3. 15、Cocos2dx 3.0游戏开发找小三之Sprite:每一个精灵都是上辈子折翼的天使
  4. Java项目打war包的方法
  5. 中文 CentOS 攻略
  6. 【Qt串口调试助手】1.6 - QTimer定时自动发送
  7. 心路历程19 -- 回顾整个历程 by tsui
  8. 无法登录苹果开发者_苹果开发者账号最新2020申请方式可支付宝微信付款
  9. iOS 汉语数字与阿拉伯数字的相互转化
  10. 学习笔记1--汽车发展史及发展趋势
  11. 前端JavaScript DOM BOM 自学复盘 D1(DOM-获取DOM元素、修改HTML标签/表单/css样式属性、定时器-间歇函数)
  12. 队列、堆、栈、堆栈的区别?
  13. 【Android 系统】--- 下载 Android源码
  14. 常用ACM知识点清单(未完待续)
  15. 基于pynput的微信刷屏代码
  16. 隐写术----LSB隐写
  17. 网红模块ESP8266与墨水屏e-Paper 的结合,实现网络刷新内容。
  18. 《比尔总动员》1——20级变强攻略之胶囊制作
  19. Chrome 浏览器字体不显示问题
  20. Lua C API 的正确用法

热门文章

  1. 计算机算法设计与分析第五章思维导图知识点总结 ( 初稿 )
  2. 三款Linux下最好的看图工具GPicView,sxiv,feh
  3. 张小龙:微信十年的产品思考
  4. MCS-51 单片机的结构和工作原理
  5. 人工智能芯片龙头之一gti概念股_AI芯片龙头寒武纪IPO价格定了!概念股全名单收好...
  6. PSY 公式的 backtrader Indicator 实现
  7. 深度学习 从零开始 —— 神经网络(七又二分之一)卷积优化结构,阿猫阿狗识别,优化步骤结果
  8. [小故事大道理] -- 木桶原理的逆向思考
  9. destoon7.0火车头免登陆发布接口 destoon模拟人工发布接口 destoon火车头免费采集接口
  10. 光学实验-偏振光的研究(matploylib)