hashmap浅析-扩容
补充部分:扩容涉及到扩容之后元素的整理问题,jdk8为了减少hashmpa冲突,使用了hash值和n进行&的操作,这么一来,同一个链表上的所有数据其实可以被划分为2类,一类是&操作之后为0的数据,保留在原位置,一类是&操作之后为1的数据,串起来放到新数组新位置上。
步骤1:首先判断是否为初次扩容,如果是,退出。如果不是,进入循环,循环遍历次数为数组中元素的个数
步骤2:(先把该节点赋值给e)判断数组中的当前节点是否为空,为空则进行下一轮循环
步骤3:如果不为空,则赋值为空,等待被GC回收。然后判断该节点是否有下一个节点,没有的话,则将该节点(通过e来获取)的hash值取出,来,并且与新数组的长度减1进行&运算,得到新的索引位置,再将e赋值给该位置。
步骤4:如果e结点后面仍然有兄弟节点,则会出现两种情况,要么后面是红黑树,要么就是链表,首先判断e节点是否为红黑树节点,是的话,在红黑树里面进行操作。
步骤5:不是红黑树的话,接下来要进行链表的移动,如补充部分所说的,同一类的连接到一起,给新数组赋值,赋值的时候只需要把各类的头部元素给数组索引位置就行。
hashmap浅析-扩容相关推荐
- HashMap的扩容机制
HashMap的扩容机制 简介 单纯的kv键值对结构,可以接受null键和null值,速度比较快,非线程安全. HashMap的数据结构 HashMap实际上是一个"链表的数组"的 ...
- HashMap底层扩容机制是2倍的原理
HashMap底层扩容2倍原理 总所周知,获取分配的两种计算公式: 内存中获取分区位置:hash(key.hashCode) % (length - 1) HashMap获取数据存储的位置:hash( ...
- HashMap的扩容及树化过程
上一篇博文 HashMap中capacity.loadFactor.threshold.size等概念的解释 讨论了HashMap中的一些基本概念,这篇博文结合具体示例,讨论下HashMap的扩容.树 ...
- 看完这篇还不懂HashMap的扩容机制,那我要哭了~
HashMap 发出的 Warning:这是<Java 程序员进阶之路>专栏的第 56 篇.那天,小二垂头丧气地跑来给我诉苦,"老王,有个学弟小默问我' HashMap 的扩容机 ...
- HashMap之扩容原理
一.什么是HashMap? HashMap 数据结构为 数组+链表(JDk1.7),JDK1.8中增加了红黑树,其中:链表的节点存储的是一个 Entry 对象,每个Entry 对象存储四个属性(has ...
- HashMap的扩容机制---resize()
扩容 就是重新计算容量,向HashMap对象里不停的添加元素,而HashMap对象内部的数组无法装载更多的元素时,对象就需要扩大数组的长度,以便能装入更多的元素. 什么时候扩容? 当向容器添加元素的时 ...
- 深入理解HashMap+ConcurrrentHashMap扩容的原理
目录 1.JDK1.7版本的HashMap扩容机制(重要) 2.JDK1.8版本的HashMap扩容机制(重要) 2.JDK1.7版本的ConcurrentHashMap扩容机制 4.JDK1.8版本 ...
- Java中HashMap常见问题 -- 扩容、树化、死链问题
写在前边 HashMap属于比较常用的数据结构了,面试过程中也经常会被问到,本篇就知识点,展开问答式分析,重点聊聊hash冲突.扩容死链.容量为2的n次方等问题~ 1.7和1.8有什么不同 1.7是 ...
- HashMap的扩容
HashMap初始化 在JDK1.8中,定义了HashMap的初始化过程,我们看看他的源码是如果定义这个初始化过程 可以看到,它的构造方法中传入了两个参数,一个是初始化容量,一个是加载因子,默认是0. ...
- HashMap的扩容方式
HashMap在容量超过负载因子所定义的容量之后,就会扩容.java里的数组是无法自己扩容的,将HashMap的大小扩大为原来数组的两倍 我们来看jdk1.8扩容的源码 final Node<K ...
最新文章
- oracle直查和call哪个更快,让oracle跑的更快1读书笔记二
- 3检测人头_基于人头检测技术客流统计摄像头及管理平台
- 数据库MySQL关系模型之关系代数
- 【bzoj5197】[CERC2017]Gambling Guide 期望dp+堆优化Dijkstra
- 1.3编程基础之算术表达式与顺序执行 19 AXB问题
- 【英语学习】【WOTD】gargantuan 释义/词源/示例
- 论文笔记_S2D.52_CMRNet++:在激光雷达地图中进行内参未知的相机的单目视觉定位
- CDH使用之CM 5.3.x安装
- 算法:Linked List Cycle(环形链表)
- uva 12230 - Crossing Rivers(概率)
- 高性能Mysql(第三版)笔记
- 安装ie9提示未能完成安装_升级Internet Explorer未能完成安装四种解决措施
- 【Java基础】Java集合、泛型和枚举
- 中小型企业应该选择什么样的OA系统?
- Ubuntu编辑文档和查看文档
- 零基础转行学编程技术难吗?
- 五子棋游戏(JavaScript+JQuery+Canvas)
- 6.9对一个工作簿中的所有工作表分别求和并将求和结果写入固定单元格
- edittextview 取消下划线
- 【硬件】军品钽电容(火炬电子)