首页 > 其他分享 >HashMap实现原理和自动扩容

HashMap实现原理和自动扩容

时间:2022-11-28 17:58:04浏览次数:84  
标签:扩容 HashMap 数组 链表 哈希 红黑树 原理

HashMap实现原理:

JDK1.7:数组+单向链表(头插)

在并发情况下头插可能出现循环链表(死循环)问题。原因:因为头插,在新数组中链表的元素顺序发生了变化,

 

 如上图,假设线程1在扩容,刚刚调整链表完毕;线程2的指针却指向的还是原来的元素。这时新数组链表中是1->2->3的指向,但是线程2却是调整(扩容)前的3->2指向

 

JDK1.8:数组+单向链表(尾插)+红黑树 

HashMap中数组的大小有什么特点?

 初始化时数组的容量是2的幂次方数,即16;

 如果初始化时指定数组大小,比如17,则实际数组大小是>17的2的幂次方数,即32.

 

 

HashMap中如何计算数组下标?

HashMap的键值对组成了数组,数组就有下标索引问题。需要根据key来计算当前key-value在数组中的位置:

可以看到,通过哈希值和(数组长度-1)的与操作【位运算】(代替取余)来计算数组下标,这种位运算要求数组大小必须为2的幂次方。

 奇数做位运算时,高位一定是0;奇数和哈希值做位运算,结果取决于哈希值的低位。

 

为何用二次哈希结果计算索引?为了让计算索引的hashcode值分布得更加均匀。

假设数组长度是10,现在有80个元素都有哈希冲突,理想情况是每个数组位,存1个元素+7个元素长度的链表。这就是分布均匀。

分布不均匀:某些链表非常长(被迫转换成红黑树),某些链表过短。

更多关于二次哈希移步

(JDK1.8为右移16位)

 

如何解决Hash冲突

上一篇文章有简单说明。

 

何时触发自动扩容机制

数组扩容因子=0.75

链表的长度>8 & 数组长度>=64,==>红黑树

红黑树生成时Node-->TreeNode的转变,同时会将单向链表转变成双向链表。

 

*本篇暂不阐述HashMap并发相关知识点。后续单独开新篇。

标签:扩容,HashMap,数组,链表,哈希,红黑树,原理
From: https://www.cnblogs.com/hangwei/p/16931453.html

相关文章

  • vue3 第二天vue响应式原理以及ref和reactive区别
    前言:前天我们学了ref和reactive,提到了响应式数据和Proxy,那我们今天就来了解一下,vue3的响应式在了解之前,先复习一下之前vue2的响应式原理vue2的响应式:原理:对......
  • 【计算机组成原理】01计算机系统概述
    1.0_你好,我是计算机组成原理1.1_计算机的发展什么是计算机系统计算机系统=硬件+软件软件系统软件——用来管理整个计算机系统Eg:操作系统、数据库管理系统(DBMS)、标......
  • 说说nextTick的使用和原理?
    分析这道题及考察使用,有考察原理,nextTick在开发过程中应用的也较少,原理上和vue异步更新有密切关系,对于面试者考查很有区分度,如果能够很好回答此题,对面试效果有极大帮助。......
  • vue的.sync修饰符用法及原理详解
    vue.sync的历史vue.sync修饰符最初存在于vue1.0版本里,但是在2.0中被移除了。但是在2.0发布之后的实际应用中,vue官方发现.sync还是有其适用之处,比如在开发可复......
  • VMware虚拟机CentOS 7 磁盘扩容
    一、环境虚拟机软件:VMware14系统版本:CentOS 7二、扩容步骤1、VM上修改磁盘信息将虚拟机关机,然后点击VM顶部菜单栏中的显示或隐藏控制台视图按钮来显示已建立的虚拟机......
  • 拓端tecdat|【视频】Lasso回归、岭回归等正则化回归数学原理及R语言实例
    在本视频中,我们将介绍Lasso套索回归、岭回归等​​正则化​​的回归方法的数学原理以及R软件实例。视频:Lasso回归、岭回归正则化回归数学原理及R软件实例Lasso回归、岭回归......
  • 深度学习框架中的“自动求导”原理是什么?
    深度学习这个概念已经火了好些年了,前些年刚开始的时候大家都不清除那些深度学习的框架是什么原理,inotherwords,大家都是只知道用这些深度学习框架,但是没有几个人真的了解这......
  • JaCoCo增量覆盖率的基本实现原理
    什么是增量覆盖率如图所示,在master分支提交了HelloController,然后从master拉了个新分支test;提交了第1次代码,增加了WorldController;提交了第2次代码,增加了DonController。增......
  • IP定位技术原理
    IP定位技术就是为确定IP设备地理位置所采用的技术。近年来,基于地理位置的网络应用层出不穷,主要包括定向广告、社交网络、网络安全、性能优化等。在IP定位系统或算法中,一......
  • ESXI虚拟机 硬盘扩容/目录(添加新硬盘)
    背景:线上服务器,磁盘Linux的虚拟机根分区已经使用90%,触发了磁盘告警,再一顿操作删除后,勉勉强强回到了82%,现在需要对根目录进行扩容。进入到EXSI管理平台,看到原来的sda磁盘......