HashMap底层扩容2倍原理

总所周知,获取分配的两种计算公式:
内存中获取分区位置:hash(key.hashCode) % (length - 1)
HashMap获取数据存储的位置:hash(key.hashCode) & (length - 1)

为何HashMap底层扩容机制是两倍?
那么先来看一下,不是扩容两倍的情况
通过key的HashCode值在进行hash散列算法后得到均匀的二进制
此时假设数组的长度为5
根据数据存储的位置计算出索引(0,1,2,3,4,)

//hash(key.hashCode) 0101 0101(因无法确认key的值,这里取随机数)
//                   &
//(length - 1)       0000 0100
------------------------------------------------------
//                   0000 0100 => 分区索引选择结果只有4,0 两种情况

解析:
无论hashcode的值是多少,只有可能取到4和0两个值,因为length-1是固定值,这种情况下,1,2,3都无法取到,总共有五个索引,但只能取到其中两个,这就造成数据倾斜,大量的数据形成链表,浪费内存空间

HashMap底层扩容机制是2倍的原理相关推荐

  1. 看完这篇还不懂HashMap的扩容机制,那我要哭了~

    HashMap 发出的 Warning:这是<Java 程序员进阶之路>专栏的第 56 篇.那天,小二垂头丧气地跑来给我诉苦,"老王,有个学弟小默问我' HashMap 的扩容机 ...

  2. HashMap的扩容机制

    HashMap的扩容机制 简介 单纯的kv键值对结构,可以接受null键和null值,速度比较快,非线程安全. HashMap的数据结构 HashMap实际上是一个"链表的数组"的 ...

  3. hashmap的扩容机制,腾讯Android开发面试记录,系列篇

    一.开始的开始 **Android框架体系架构(高级UI+FrameWork源码)**这块知识是现今使用者最多的,我们称之Android2013~2016年的技术,但是,即使是这样的技术,Androi ...

  4. HashMap的扩容机制---resize()

    扩容 就是重新计算容量,向HashMap对象里不停的添加元素,而HashMap对象内部的数组无法装载更多的元素时,对象就需要扩大数组的长度,以便能装入更多的元素. 什么时候扩容? 当向容器添加元素的时 ...

  5. hashmap的扩容机制,这些年我所经历的所有面试,工作感悟

    主要说一下个人经历,希望能给即将面试的小伙伴一些有效信息.大家都要加油~ 基本情况 先说一下个人基本情况,计算机科学与技术专业.主要学的Android开发,所以投的岗位都是Android开发工程师.投 ...

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

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

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

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

  8. hashmap 扩容是元素还是数组_HashMap的扩容机制---resize()

    面试的时候闻到了Hashmap的扩容机制,之前只看到了Hasmap的实现机制,补一下基础知识,讲的非常好 原文链接: Hashmap是一种非常常用的.应用广泛的数据类型,最近研究到相关的内容,就正好复 ...

  9. StringBuffer、StringBuilder、ArrayList、Vector、HashMap、HashTable 的扩容机制

    1. StringBuffer.StringBuilder 的扩容机制 StringBuffer.StringBuilder,默认初始化是 16 个字符,默认增容为 原长度+2 → 扩容后:2*(n+ ...

最新文章

  1. 512 个 AI 职位、11 万美元年薪,盘点 2018 最佳人工智能公司
  2. Matcher 类中的group(),group(int i),groupCount()
  3. linux下获取某文件的总行数
  4. php读程序,PHP 读取大文件程序代码
  5. 数据包通过分层模型实现通信的过程
  6. GitBucket管理员添加人员
  7. 走进AngularJs(一)angular基本概念的认识与实战
  8. 专注于钢铁行业电子商务的服务网站,钢铁行业的网上贸易市场 一起成长
  9. 《数据科学》第二章自学报告
  10. 解析数论 1: Fourier积分和Fourier变换
  11. jpype了解,获取,安装
  12. python模拟登录中国海洋大学教务系统(青果)- 爬取学期所有专业课至excel - 并进行课表排课(一)
  13. PowerPoint 在播放时自动运行宏
  14. python3多线程爬取微博配图相册,可自动获取session【简单,快速】
  15. 视频拍摄技巧——构图
  16. 夜曲歌词 拼音_矢野真纪《夜曲》罗马拼音歌词
  17. 【CodeForces - 869】 A B C E 【组合数打表】
  18. C语言-小黄鸭☞循环结构 之 for()
  19. FreeRTOS学习笔记【二】——FreeRTOS 移植
  20. 详解 利用NPOI向Excel指定位置中加入图片(支持.xlsx和.xls)

热门文章

  1. 2017华为软件精英挑战赛决赛思路分享
  2. GetLastError函数封装显示具体错误信息
  3. 计算机打印设置方法,针式打印机设置教程详解,小编教你针式打印机设置共享/纸张大小方法...
  4. APP爬虫- 手机安装证书-解决SSL证书的移动端数据包问题
  5. 报错:RuntimeError: view size is not compatible with input tensor‘s size and stride (at least one dimen
  6. 推荐7个python案例,python真的无所不能且容易上手(带教程)
  7. 无所不能的python是如何解决程序员的终身大事的?
  8. 将uc/OS-III移植到stm32F103上并创建多任务
  9. Logo常用的12种颜色
  10. java安装的时候无效参数,java.sql.SQLException: 调用中无效的参数