文章目录

  • 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扩容相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. HashMap 扩容 加载因子

    HashMap 扩容 加载因子 最近在看HashMap源码,对于扩容因子=0.75感到很费解,为什么在用了75%的容量的时候就要进行扩容呢?数组中明明还有25%的空间没有使用.为什么不等到数组几乎满了 ...

  9. HashMap扩容改进分析

    HashMap扩容 JDK1.8以后对之前版本的HashMap扩容多线程场景下的死锁的问题进行了解决.采用高低位拆分转移方式,避免了链表的产生. resize()方法扩容部分 for (int j = ...

最新文章

  1. javascript和jq的事件委托
  2. SQL SERVER作业的Schedules浅析
  3. c语言编程经典实例利润,C语言经典编程实例100题解答
  4. 0202年了,怎么还这么多人不会搜索
  5. http server类型和版本号_nginx 简单隐藏服务器版本号
  6. 【Python笔记】字符串常见操作
  7. Windows多线程应用程序的编译和链接
  8. iOS:使用block进行类与类,控制器与控制器之间的传值
  9. SM2算法第十篇:数字证书及CA的扫盲介绍
  10. 千套多行业多样式单页多页中英文简历模板(自荐信,简历封面,求职),共630M
  11. f(x)和g(x)分别是概率密度函数,h(x)=f(x)g(x)还会是概率密度函数么?
  12. 计算机网络>速率、带宽、吞吐量
  13. 知识点篇:8.1)坑爹的面试问题--选定轴孔配合公差等级
  14. HBaseCon Asia 2019 Track 3 概要回顾
  15. IOS TableViewCell分割线设置和隐藏多余cell
  16. 《2022中国供应链物流创新科技报告》:菜鸟、顺丰、JDL、极智嘉、旷视、富勒、易流等超百家企业科技产品方案全公开!(附下载)...
  17. oracle数据库variable,oracle中的define,declare,variable的差别
  18. 南京工业大学python课件_南京工业大学-NJUT.ppt
  19. CnOpenData中国专利详细地址数据
  20. TwinCat3学习问题

热门文章

  1. 详解模板引擎工作机制
  2. 判断一个对象为空对象的五种方法
  3. python进程间通信--信号Signal
  4. Orleans 简介
  5. 14-Javaweb-jdbc案例(简单的curd 分页)
  6. ASP.NET之WebForm篇(一)引言
  7. 小米4如何用计算机读取文件夹,小米手机如何连接电脑?如何传输文件至电脑?[多图]...
  8. Word VBA:批量导出Visio对象为图片
  9. python 读取word表格中的表格
  10. 联合主键的用法及注意事项