HashMap 扩容
什么时候扩容:
当向容器添加元素的时候,会判断当前容器的元素个数,如果大于等于阈值—即当前数组的长度乘以加载因子的值的时候,就要自动扩容啦。
存放新值的时候当前已有元素的个数必须大于等于阈值
存放新值的时候当前存放数据发生hash碰撞
(当前key计算的hash值换算出来的数组下标位置已经存在值)
扩容(resize)
重新计算容量,向HashMap对象里不停的添加元素,而HashMap对象内部的数组无法装载更多的元素时,对象就需要扩大数组的长度,以便能装入更多的元素。当然Java里的数组是无法自动扩容的,方法是使用一个新的数组代替已有的容量小的数组,就像我们用一个小桶装水,如果想装更多的水,就得换大水桶。
Hashmap的扩容需要满足两个条件:当前数据存储的数量(即size())大小必须大于等于阈值;当前加入的数据是否发生了hash冲突。
因为上面这两个条件,所以存在下面这些情况
(1)、就是hashmap在存值的时候(默认大小为16,负载因子0.75,阈值12),可能达到最后存满16个值的时候,再存入第17个值才会发生扩容现象,因为前16个值,每个值在底层数组中分别占据一个位置,并没有发生hash碰撞。
(2)、当然也有可能存储更多值(超多16个值,最多可以存26个值)都还没有扩容。原理:前11个值全部hash碰撞,存到数组的同一个位置(这时元素个数小于阈值12,不会扩容),后面所有存入的15个值全部分散到数组剩下的15个位置(这时元素个数大于等于阈值,但是每次存入的元素并没有发生hash碰撞,所以不会扩容),前面11+15=26,所以在存入第27个值的时候才同时满足上面两个条件,这时候才会发生扩容现象。
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 = ...
- Java之HashMap系列--HashMap扩容的原理
原文网址:Java之HashMap系列--HashMap扩容的原理_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Java的HashMap是如何扩容的. 重要大小 类 初始容量 最大容量 扩容 ...
最新文章
- ajax异步提交 java_jquery ajax异步提交表单数据的方法
- Python使用matplotlib可视化条形图(bar plot)、自定义在条形图的顶部添加数值标签(Bar Chart)
- 【Linux】26_文件服务FTP Server
- 北斗导航 | Matlab实现GNSS接收机经纬度数据(NMEA语句)实时获取和地图绘制(Matlab源代码)
- 利用二分法解决 leetcode 378. Kth Smallest Element in a Sorted Matrix
- paddleocr常见问题(3)
- PHP CodeBase: 判断用户是否手机访问
- jQuery中的attr()与prop()设置属性、获取属性的区别
- jQuery文档操作常用方法1
- eclispe 下载与安装
- python-第三方接口获取验证码
- 【STM32H7】第10章 ThreadX GUIX移植到STM32H7(GCC)
- 以存储为例说明设备busy的解决方法
- C语言:带你轻松干掉 腾讯笔试大题 带环链表
- 基于宝塔面板把网站和数据库文件备份到又拍云存储空间图文教程
- 自动驾驶/机器人 SLAM算法 面经1
- 2016在电影院看过的电影
- OpenLayers 3实践与原理探究3-ol3一个完整的例子
- 图片base64编码的前端展示及后端解码,编码
- 华为虚拟一键部署服务器,服务器一键部署