首页 > 其他分享 >HashMap扩容原理

HashMap扩容原理

时间:2024-05-16 23:09:32浏览次数:26  
标签:扩容 hash HashMap 位置 链表 添加 数组 原理

在添加元素或初始化的时候需要调用resize方法进行扩容,第一次添加数据初始化数组长度为16,以后每次每次扩容都是达到了扩容阈值(数组长度*0.75)。
每次扩容的时候,都是扩容之前容量的2倍。
扩容之后,会新创建一个数组,需要把老数组中的数据挪动到新的数组中。

  • 没有hash冲突的节点,则直接使用e.hash&(newCap-1)计算新数组的索引位置。
  • 如果是红黑树,走红黑树的添加。
  • 如果是链表,则需要遍历链表,可能需要拆分链表,判断e.hash&oldCap是否为0,该元素的位置要么停留在原始位置,要么移动到原始位置+增加的数组大小这个位置上。

标签:扩容,hash,HashMap,位置,链表,添加,数组,原理
From: https://www.cnblogs.com/worshipone/p/18196943

相关文章

  • HashMap put流程
    判断键值对数组table是否为空或为null,否则执行resize()进行扩容(初始化)。根据键值key计算hash值得到数组索引。判断table[i]==null,条件成立,直接新建节点添加。如果table[i]==null,不成立判断table[i]的首个元素是否和key一样,如果相同直接覆盖value判断table[i]是否为treeNo......
  • HashMap原理
    HashMap的实现原理底层使用hash表数据结构,即数组+(链表|红黑树)。添加数据时,计算key的值确定元素在数组中的下标,key相同则替换,不同则存入链表或红黑树中。获取数据通过key的hash计算数组下标获取元素。HashMap的JDK1.7和JDK1.8有什么区别JDK1.8之前采用的拉链法,数组+链表。J......
  • 前端面试题 - vue的双向绑定原理是什么?
    前端面试题-vue的双向绑定原理是什么?vue2的双向数据绑定是通过数据劫持结合发布者订阅者模式的方式来实现。通过object.defineProperty来劫持各个属性的setter,getter,在数据变化时发布消息给订阅者,触发相应的监听回调来渲染视图。Vue3利用Proxy代理来处理双向数据绑定。可以......
  • 【datawhale打卡】深入剖析大模型原理——Qwen Blog
    教程及参考文档QwenBlog科普神文,一次性讲透AI大模型的核心概念Largelanguagemodels,explainedwithaminimumofmathandjargon0.前置知识由于我没有LLM基础,所以直接上手看文档看的是一头雾水。然后就去补了一下基础知识,这里算是一点简单的个人理解和总结吧。LLM......
  • spring boot 的自动装配原理
    什么是自动装配?在传统的Spring程序开发中,需要我们手动配置大量的bean,例如数据源,事务管理器,视图解析器等。这些配置过程繁琐而容易出错,加大了开发难度和成本。而SpringBoot的自动装配机制则能够自动完成这些配置过程,使得开发者可以更加专注于业务逻辑的实现。SpringBoot......
  • 说说webpack proxy工作原理?为什么能解决跨域?
    一、是什么webpackproxy,即webpack提供的代理服务基本行为就是接收客户端发送的请求后转发给其他服务器其目的是为了便于开发者在开发模式下解决跨域问题(浏览器安全策略限制)想要实现代理首先需要一个中间服务器,webpack中提供服务器的工具为webpack-dev-serverwebpack-dev-se......
  • 串口通信原理
          异步串行:异步说明不带时钟信号,串行说明是按位(一位=8bit),一位一位传输       ......
  • 安捷伦34401A原理图研究 24年-5-15
    1.原理图分为9页,如下第6页的主控使用80C192,是INTEL早期出的16位单片机,外接的256KEPROM,32KSRAM。第7页有个单片机87C51,是51单片机,主要是用来GPIB和RS232通信用第9页也有个单片机87C51,是51单片机,所以据我所知一共3个单片机。 2.ASIC定制芯片不熟悉,看不懂什么意思,......
  • 【java】【集合类】ArrayList扩容机制
    扩容规则1.ArrayList()无参构造扩容2.ArrayList(intinitialCapacity)扩容3.publicArrayList(Collection<?extendsE>c)扩容4.add(Objecto)扩容5.addAll(Collectionc)扩容要注意的是,以下所有代码中用反射方式来更直观地反映ArrayList的扩容特征,但从JDK9由于模......
  • 【java】【集合类】HashMap之扩容原理
    一、什么是HashMap?HashMap数据结构为数组+链表(JDk1.7),JDK1.8中增加了红黑树,其中:链表的节点存储的是一个Entry对象,每个Entry对象存储四个属性(hash,key,value,next)二、为什么要使用HashMap?对于要求查询次数特别多,查询效率比较高同时插入和删除的次数比较少的情况下,通常会选择Arra......