HashMap的扩容看这一篇足够

在Java中,对于HashMap这样的实现,put方法是用来将一个键值对插入到Map中的核心方法。以下是HashMap类中put方法的大致执行流程:

  1. 计算Hash值
    • 首先,put方法会接收一个键(Key)和一个值(Value)作为参数。
    • 调用键对象的hashCode()方法得到一个哈希码(hash code)。
    • 这个哈希码通常会通过某种散列函数进一步处理,以便均匀分布到HashMap内部的数组中。在HashMap中,会使用(n - 1) & hash这样的运算来确定数组的索引位置,其中n是数组的长度。
  2. 解决哈希冲突
    • 如果目标数组索引位置上已经存在元素(即发生了哈希冲突),则会检查是否存在链表(或树形结构,在Java 8中引入了红黑树来优化链表过长的情况)。
    • 如果是链表结构,则遍历链表,通过equals()方法来查找是否有相同的键。如果有,则更新该位置上的键对应的值。
    • 如果遍历结束后都没有找到相同的键,则会在链表末尾(或树形结构的相应位置)新增一个包含新键值对的节点。
  3. 扩容(Resize)
    • 在插入新元素之前或之后(取决于具体实现),HashMap可能需要检查是否需要扩容。当Map中的元素数量超过一定的阈值(通常是容量的一定比例,默认负载因子为0.75)时,HashMap会创建一个新的更大的数组,并将所有旧的键值对重新哈希到新的数组中,这一过程称为“扩容”或“rehash”。
  4. 插入新元素
    • 如果目标位置上没有冲突或冲突已解决,则直接在该位置上插入新的键值对节点。
  5. 调整大小
    • 插入新元素后,如果触发了扩容操作,还会相应调整HashMap的容量和阈值,以适应更多的键值对。
      Java的Map put方法涉及到了哈希计算、冲突解决、可能的扩容操作,最终确保键值对被正确地插入到Map中。整个过程设计的目标是为了尽可能快速地进行查找、插入和删除操作,并保持较好的空间效率。

HashMap添加数据的详细过程,如下图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/820561.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

局域网管理软件哪个好?局域网电脑管理系统实践案例

之前有一个公司案例,是这样的: 公司名称:智慧科技有限公司 背景: 智慧科技有限公司是一家拥有数百名员工的中型企业,随着业务的快速发展,公司面临着网络管理上的挑战。 员工在日常工作中需要频繁地访问…

微信小程序使用iconfont

进入iconfont,添加至项目 进入项目,点击生成代码,或更新代码 点击打开样式 复制内容到小程序的style文件夹下 最后引入到app.wxss

用ChatGPT读了几百篇文献,我总结出了文献综述这些经验

点击下方▼▼▼▼链接直达AIPaperPass ! AIPaperPass - AI论文写作指导平台 近期小编会将学术论文写作每一个流程需要了解的细节与ChatGPT在这细节的背景下如何提升我们的学术论文进行分章节讨论。最终汇总成一篇长文攻略。宝子们敬请期待哦。今天我们来详细聊聊文…

22 文件系统

了解了被打开的文件,肯定还有没被打开的文件,就是磁盘上的文件。先从磁盘开始认识 磁盘 概念 内存是掉电易失存储介质,磁盘是永久性存储介质 磁盘的种类有SSD,U盘,flash卡,光盘,磁带。磁盘是…

防止企业数据泄密的四种有效措施

防止企业数据泄密的四种有效措施 泄密大案每天都在上演,受害者既有几十人的小型企业,也有上万人的世界500强,为什么这些企业都难逃数据泄露的噩梦呢?我们应该采取什么措施来防止信息泄密呢? 首先我们来看看数据泄密的…

小肥柴慢慢手写数据结构(C篇)(5-5 Huffuman编码)

小肥柴慢慢学习数据结构笔记(C篇)(5-5 Huffman编码) 目录5-16 编码案例5-17 Huffman编码原理5-18 Huffman编码/解码实现5-18-1 大致思路5-18-2 编码实现5-18-3 解码实现5-18-4 测试 5-19 实际案例总结参考文献 目录 5-16 编码案例…

✌粤嵌—2024/4/11—合并区间

代码实现: /*** Return an array of arrays of size *returnSize.* The sizes of the arrays are returned as *returnColumnSizes array.* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().*/// 交换 void swap(i…

YOLOV5检测+追踪使用deepstream部署(c++版)

文章目录 一、Deepstream1.1 简介1.2 图架构(Graph architecture)1.3 应用架构(Application Architecture) 二、配置文件方式运行Deepstream2.1 环境准备2.2 主机运行2.3 配置文件解析2.4 docker运行 三、代码方式运行Deepstream3…

Python编程之旅:深入探索强大的容器——列表

在Python编程的世界中,容器(Containers)是一种用于存储多个项目的数据结构。其中,列表(List)是最常用且功能强大的容器之一。无论是初学者还是资深开发者,掌握列表的使用方法和技巧都是提升Pyth…

【Android】重温Activity生命周期

前言 Android中用得最多的组件是Activity,而它的生命周期也是最基础的知识,从刚接触Android到工作中会频繁依赖这部分知识。可能大多数人能说出页面新建到页面关闭会走的生命周期:onCreate、onStart、onResume、onPause、onStop、onDestory&…

Linux --- 高级IO

目录 1. 什么是IO 2. 阻塞的本质 3. 五种IO模型 3.1. 通过故事认识五种IO模型 3.2. 上述故事的总结 3.3. 具体的五种IO模型 3.3.1. 阻塞IO 3.3.2. 非阻塞轮询式IO 3.3.3. 信号驱动IO 3.3.4. 多路转接IO 3.3.5. 异步IO 4. 非阻塞IO 4.1. fcntl 系统调用 1. 什么是I…

抖店如何打造一款爆品?按照这三个阶段做,爆单很简单

大家好,我是电商笨笨熊 做抖音小店不懂得怎么选品,那还怎么出销量? 选品时很多新手最苦恼的问题,不知道从哪里选品更容易选中爆品、不懂得什么样的品才是爆品,更不懂得如何打造一款爆品。 那么今天,我们…

创建影子用户

文章目录 1.认识影子用户2.创建隐藏账户并加入管理员组3.修改注册表3.删除用户4.添加管理员权限 1.认识影子用户 影子用户通常指的是那些在系统用户列表中不可见,但在某些情况下可以进行操作的用户。在内网渗透过程中,当我们拿到shell时,肯定…

android11 如何修改状态栏的背景

修改status_bar.xml &#xff1a; <LinearLayout android:id"id/status_bar_contents"android:background"#1ABC9C"android:layout_width"match_parent"android:layout_height"match_parent"android:paddingStart"dimen/statu…

【重回王座】ChatGPT发布最新模型gpt-4-turbo-2024-04-09

今天&#xff0c;新版GPT-4 Turbo再次在大型模型排行榜上荣登榜首&#xff0c;成功超越了此前领先的Claude 3 Opus。另外&#xff0c;新模型在处理长达64k的上下文时&#xff0c;性能竟能够与旧版在处理26k上下文时的表现相当。 目前GPT-4 Turbo仅限于ChatGPT Plus的用户&…

Nginx服务 重写功能与反向代理

六、重写功能 rewrite Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求&#xff0c;此功能依靠 PCRE(perl compatible regular expression)&#xff0c;因此编译之前要安装PCRE库&#xff0c;rewrite是nginx服务器的重要功能之一&#xff0c;用于实现URL的…

DBA面试总结(Mysql篇)

一、delete与trancate的区别 相同点 1.两者都是删除表中的数据&#xff0c;不删除表结构 不同点 1.delete支持按条件删除&#xff0c;TRUNCATE不支持。 2.delete 删除后自增列不会重置&#xff0c;而TRUNCATE会被重置。 3.delete是逐条删除&#xff08;速度较慢&#xff09…

【linux编译报错】g++: error:elf_x86_64:没有那个文件或目录

背景 gcc版本已经是高版本了&#xff0c;9开头了&#xff0c;但是在IDE编译的时候报错&#xff1a; 但是记得自己没有配置过这种参数&#xff0c;只能一步步查了 解决方法 步骤1&#xff1a;先google看了下别人是否碰到该问题 找到一个解决方法说&#xff1a; 在Makefile中…

配置路由器实现互通

1.实验环境 实验用具包括两台路由器(或交换机)&#xff0c;一根双绞线缆&#xff0c;一台PC&#xff0c;一条Console 线缆。 2.需求描述 如图6.14 所示&#xff0c;将两台路由器的F0/0 接口相连&#xff0c;通过一台PC 连接设备的 Console 端口并配置P地址&#xff08;192.1…

如何在CentOS安装Firefox并结合内网穿透工具实现公网访问本地火狐浏览器

文章目录 1. 部署Firefox2. 本地访问Firefox3. Linux安装Cpolar4. 配置Firefox公网地址5. 远程访问Firefox6. 固定Firefox公网地址7. 固定地址访问Firefox Firefox是一款免费开源的网页浏览器&#xff0c;由Mozilla基金会开发和维护。它是第一个成功挑战微软Internet Explorer浏…