【集合类】hashmap扩容
文章目录
- 1. 概述
- 2. hashmap 1.7实现
1. 概述
由于hashmap 1.7 、1.8实现有所区别,单独列出。
为什么要扩容?
因为达到扩容条件时,说明链表的hash冲突比较严重了,这样链表的长度就会很长,查找或其他操作就会很慢!
扩容后,减轻了hash冲突,提升操作效率。
2. hashmap 1.7实现
我们知道 HashMap 1.7 的底层是由数组,链表组成的,在 HashMap 做扩容操作时,除了把数组容量扩大为原来的两倍外,还会对所有元素重新计算 hash 值,因为长度扩大以后,hash值也随之改变。
如果是简单的 Node 对象,只需要重新计算下标放进去就可以了.
假设一个 HashMap 原本 bucket 大小为 16。下标 3 这个位置上的 19, 3, 35 由于索引冲突组成链表。
当 HashMap 由 16 扩容到 32 时,19, 3, 35 重新 hash 之后拆成两条链表。
由过程可以看到,19, 3, 35 重新 hash 之后拆成两条链表,降低了单个链表的长度,提升了后续的查找等操作效率!
参考:《Java源码系列4——HashMap扩容时究竟对链表和红黑树做了什么?》
【集合类】hashmap扩容相关推荐
- Btrace详细指南(JDK7,监控HashMap扩容)
背景 JAVA中如何排查疑难杂症,如何动态获取应用信息,我们有BTrace! PS:集团有大杀器arthas,这里我们先从最原始最广泛的BTrace开始,后面可以玩玩Greys(开源,强于BT ...
- hashmap扩容 面试_HashMap面试,看完这一篇就够了(上)
以下HashMap源码的解析都是基于java8来讲解的. HashMap的结构是数组加链表的形式(jdk7中也是),在java8中引入了红黑树,由于红黑树的时间复杂度是O(log n),引入红黑树是为 ...
- hashmap扩容机制_图文并茂:HashMap经典详解!
点击上方 Java后端,选择 设为星标 优质文章,及时送达 代码中的注解多看几遍,其中HashMap的扩容机制是要必懂知识!结合图片一起理解! 什么是 HashMap? HashMap 是基于哈希表的 ...
- hashmap扩容线程安全问题_HashMap在1.7 1.8中的线程安全问题
HashMap的线程不安全主要体现在下面两个方面: 在JDK1.7中,当并发执行扩容操作时会造成环形链和数据丢失的情况. 在JDK1.8中,在并发执行put操作时会发生数据覆盖的情况. ? ? 常被问 ...
- hashmap扩容机制_图文并茂,HashMap经典详解!
Java面试笔试面经.Java技术每天学习一点 公众号Java面试 关注我不迷路 作者:feigeswjtu 来源:https://github.com/feigeswjtu/java-basics ...
- hashmap扩容_面试官问:HashMap在并发情况下为什么造成死循环?一脸懵
这个问题是在面试时常问的几个问题,一般在问这个问题之前会问Hashmap和HashTable的区别?面试者一般会回答:hashtable是线程安全的,hashmap是线程不安全的. 那么面试官就会紧接 ...
- 聊一聊不同技术栈中hashmap扩容机制
前言 hash简介 作为后端开发,说HashMap是我们最经常接触到的数据结构都不为过,而HashMap如其名最主要依赖的算法就是hash散列算法来存储和读取数据. 以关键码值K为自变 ...
- HashMap 扩容 加载因子
HashMap 扩容 加载因子 最近在看HashMap源码,对于扩容因子=0.75感到很费解,为什么在用了75%的容量的时候就要进行扩容呢?数组中明明还有25%的空间没有使用.为什么不等到数组几乎满了 ...
- HashMap扩容改进分析
HashMap扩容 JDK1.8以后对之前版本的HashMap扩容多线程场景下的死锁的问题进行了解决.采用高低位拆分转移方式,避免了链表的产生. resize()方法扩容部分 for (int j = ...
最新文章
- javascript和jq的事件委托
- SQL SERVER作业的Schedules浅析
- c语言编程经典实例利润,C语言经典编程实例100题解答
- 0202年了,怎么还这么多人不会搜索
- http server类型和版本号_nginx 简单隐藏服务器版本号
- 【Python笔记】字符串常见操作
- Windows多线程应用程序的编译和链接
- iOS:使用block进行类与类,控制器与控制器之间的传值
- SM2算法第十篇:数字证书及CA的扫盲介绍
- 千套多行业多样式单页多页中英文简历模板(自荐信,简历封面,求职),共630M
- f(x)和g(x)分别是概率密度函数,h(x)=f(x)g(x)还会是概率密度函数么?
- 计算机网络>速率、带宽、吞吐量
- 知识点篇:8.1)坑爹的面试问题--选定轴孔配合公差等级
- HBaseCon Asia 2019 Track 3 概要回顾
- IOS TableViewCell分割线设置和隐藏多余cell
- 《2022中国供应链物流创新科技报告》:菜鸟、顺丰、JDL、极智嘉、旷视、富勒、易流等超百家企业科技产品方案全公开!(附下载)...
- oracle数据库variable,oracle中的define,declare,variable的差别
- 南京工业大学python课件_南京工业大学-NJUT.ppt
- CnOpenData中国专利详细地址数据
- TwinCat3学习问题