HashMap的put()方法执行流程

HashMap的数据结构在jdk1.8之前是数组+链表,为了解决数据量过大、链表过长是查询效率会降低的问题变成了数组+链表+红黑树的结构,利用的是红黑树自平衡的特点。

链表的平均查找时间复杂度是O(n),红黑树是O(log(n))。

HashMap中的put方法执行过程大体如下:

1、判断键值对数组table[i]是否为空(null)或者length=0,是的话就执行resize()方法进行扩容。

2、不是就根据键值key计算hash值得到插入的数组索引i。

3、判断table[i]==null,如果是true,直接新建节点进行添加,如果是false,判断table[i]的首个元素是否和key一样,一样就直接覆盖。

4、判断table[i]是否为treenode,即判断是否是红黑树,如果是红黑树,直接在树中插入键值对。

5、如果不是treenode,开始遍历链表,判断链表长度是否大于8,如果大于8就转成红黑树,在树中执行插入操作,如果不是大于8,就在链表中执行插入;在遍历过程中判断key是否存在,存在就直接覆盖对应的value值。

6、插入成功后,就需要判断实际存在的键值对数量size是否超过了最大容量threshold,如果超过了,执行resize方法进行扩容。

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

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

相关文章

mysql的增删改查(常用)

增(insert) 语法: insert into 表名(字段) values( 字段对应的值) 案例: 创建一个学生表 结构如下: create table student(id int ,name varchar(20),age int); 向表中插入2条数据 create table student(id int ,n…

golang 函数式编程库samber/mo使用: Result

golang 函数式编程库samber/mo使用: Result 如果您不了解samber/mo库, 请先阅读上一篇 Option , 这篇讲述结构体Result的使用 Result和Option区别 samber/mo有了Option, 为什么还有Result呢? 我们先看看定义: Opt…

【CSS】什么是文档流、什么是BFC,怎么触发BFC,BFC 有什么应用场景

什么是文档流 文档流是 html 元素的排列方式文档流分为 标准文档流【格式化上下文】 它是页面中的一块渲染区域,有一套渲染规则,决定了其子元素如何布局,以及和其他元素之间元素按照其在 HTML 中的先后位置至上而下布局,在这个过…

小程序--vscode配置

要在vscode里开发微信小程序,需要安装以下两个插件: 安装后,即可使用vscode开发微信小程序。 注:若要实现鼠标悬浮提示,则需新建jsconfig.json文件,并进行配置,即可实现。 jsconfig.json内容如…

linux系统---安装使用nginx

目录 一、编译安装Nginx 1、关闭防火墙,将安装nginx所需要软件包传到/opt目录下 ​编辑2、安装依赖包 3、创建运行用户、组 4、编译安装nginx 5、创建软链接后直接nginx启动 ​编辑 6、创建nginx自启动文件 ​编辑6.1 重新加载配置、设置开机自启并开启服务…

一次奇怪的事故:机器网络连接打满,导致服务不可用

业务背景 发生事故的业务系统是一个toB业务,业务是服务很多中小企业进行某项公共信息指标查询。系统特点:业务处理相对简单,但是流量大,且对请求响应要求较高: 业务请求峰值qps达50w,平时流量达20w左右。 请求响应时…

开发工具篇第36讲:如何使用Typora+Gitee+PicGo+OSS+Idea创建属于自己的云笔记

如何使用Typora+Gitee+PicGo+OSS+Idea创建属于自己的云笔记 好记性不如烂笔头,记笔记是一个好习惯,本人习惯通过Typora软件记录markdown笔记,但是遇到了多设备同步笔记的问题,本文是开发工具篇第36讲,介绍通过Typora+PicGo+Gitee搭建个人云笔记平台,使得多设备都能看到最…

175基于matlab信号匹配追踪稀疏分解代码

基于matlab信号匹配追踪稀疏分解代码,基于gabor时频原子,对信号重构效果好。输出原子选择过程,重构误差及重构后的信号。程序已调通,可直接运行。 175 匹配追踪稀疏分解 gabor时频原子 (xiaohongshu.com)

申创贝拓电气设备邀您参观2024生物发酵展

参展企业介绍 BETTO贝拓电气成立于2017年,初期总部坐落于安徽合肥,从事工业电控机柜的设计和销售工作。2022年总部迁往上海,有了自己的制造基地,涉及制造和销售工业控制柜、操作台、IT机柜、户外机柜、人机界面、悬臂、电气安装成…

pytest教程-12-fixture作用域

领取资料,咨询答疑,请➕wei: June__Go 上一小节我们学习了pytest fixture的基本使用方法,本小节我们讲解一下fixture的作用域。 fixture前后置区分 控制fixture的前置和后置操作是通过yield关键字进行来区分的,代码在yield前面…

SpringBoot集成PageHelper分页实现

目录 1.相关介绍 2.使用方式 1.引入 PageHelper 依赖 2.编写Mapper接口和xml映射 3.编写Service(此处直接写Impl,接口省略) 4.控制层Controller 1.相关介绍 PageHelper 是一个开源的 MyBatis 分页插件,可以帮助开发者方便地实现…

2024年 PyGame:为什么在移动/拖动窗口时pygame.event.get()会冻结

PyGame:为什么在移动/拖动窗口时pygame.event.get()会冻结 在本文中,我们将介绍为什么在使用PyGame库时,在移动或拖动窗口的过程中,会出现pygame.event.get()方法冻结的问题。 一、问题背景 PyGame是一个基于Python的开源游戏开…

构建React TodoList应用:管理你的任务清单

构建React TodoList应用:管理你的任务清单 在日常生活和工作中,任务管理是一项至关重要的任务。为了更好地组织和管理我们的工作和生活,我们需要一个高效而简单的任务管理工具。本文将介绍如何使用React框架构建一个功能丰富的TodoList应用&…

如何保证档案室符合建设标准要求

保证档案室符合建设标准要求需要考虑以下几个方面: 1. 总体规划:合理规划档案室的布局和大小,确保能够满足现有和未来的档案存储需求。考虑档案室的空间利用率、通风、照明、安全出口等因素。 2. 档案室环境:档案室的环境应具备稳…

【Android 高德地图POI定位地址搜索】

先上演示: 高德地图的key申请这里就不讲了,比较简单,网上有很多资料,或者前往官网查看:官方文档 依赖引入 项目使用了如下依赖: //高德地图implementation com.amap.api:3dmap:latest.integration//地图…

第六十八天 APP攻防-XposedFridaHook证书校验反代理代理转发

第68天 APP攻防-Xposed&Frida&Hook&证书校验&反代理&代理转发 知识点: 1、APP防代理绕过-应用&转发 2、APP证书校验类型-单向&双向 3、APP证书校验绕过-Frida&XP框架等 章节点: 1、信息收集-应用&资产提取&权…

Elasticsearch 别名(Aliases)的作用

Elasticsearch 8.4.3 别名(Aliases) 一. 介绍二. 别名的优势三. 别名的基本操作3.1 创建别名3.2 查询别名关联的索引3.3 删除别名3.4 更新别名3.5 通过别名查询数据 前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接…

【Redis学习笔记03】Java客户端

1. 初识Jedis Jedis的官网地址&#xff1a;https://github.com/redis/jedis 1.1 快速入门 使用步骤&#xff1a; 注意&#xff1a;如果是云服务器用户使用redis需要先配置防火墙&#xff01; 引入maven依赖 <dependencies><!-- 引入Jedis依赖 --><dependency&g…

C++类与对象(3)Inheritance

主要结合菜鸟教程和上课内容学习。 基础知识 C 继承 | 菜鸟教程 (runoob.com) 一个类可以派生自多个类&#xff0c;这意味着&#xff0c;它可以从多个基类继承数据和函数。定义一个派生类&#xff0c;我们使用一个类派生列表来指定基类。类派生列表以一个或多个基类命名&…

大数据软件,待补充

数据采集&#xff1a; 实时采集&#xff1a; Debezuim Debezuim是构建在 Apach Kafka之上&#xff0c;并提供Kafka连接器来监视特定的数据库管理(采集多种数据库) Canal canal 是阿里开发&#xff0c;用于实时采集Mysql 当中变化的数据 maxwell,flinkX,flinkCDC 离线采集&#…