HashMap及其相关知识点

news2024/11/24 20:34:14

一、HashMap插入与删除

通过将key转换为hashCode(int),通过hashCode计算下标,int index = hashCode & (length - 1),从而实现插入与删除。

二、Hash冲突

Java8之前:通过数组+链表的数据结构解决hash冲突,头插法。

Java8之后:数据+链表+红黑树,尾插法,因为单链表如果元素太多,查找效率低。

优化:HashMap的容量必须是2的次幂,减少hash冲突。

三、HashMap线程安全问题

HashMap是线程不安全的。

多线程中可以使用HashTable,它是线程安全的。

HashTable的问题:

synchronized加在方法上,方法锁,锁住整个数组+链表/红黑树,效率低。synchronized是对象内置锁,由JVM管理开锁&关锁。多个线程同时操作HashTable,只有一个线程能获得锁往下执行。

多线程中可以使用ConcurrentHashMap,它也是线程安全的。

synchronized加在代码块上,代码块锁,锁住链表,只有在多个线程同时操作一个链表是才会产生性能问题。

四、HashMap与SparseArray的对比

结论:SparseArray占用内存更小,get/put/remove性能更优。

1.HashMap

1.1.时间

put:

  • 根据 key 计算hashCode值(int),hashCode与数组长度相与(&)计算元素的index(下标),如果index相同,就会产生hash冲突。
  • 比较hashCode和key是否相等,如果相等,替换旧值,否则插入新的节点,形成链表(耗时
  • 如果数组的容量已经达到阈值,则进行数组的扩容,根据hash值计算元素下标,把旧数组元素复制到新数组中(耗时)。
  • 简单来说就是插入比对耗时和扩容耗时(rehash)导致HashMap性能相对较差

get:

  • 计算hash值,用hash值计算index与put相同。
  • 如果key相等(==) 或者 hash值相等&&key相等(equals),则返回查到的值,否则返回null。
  • 简单来说也是查找比对耗时

1.2.空间

  • key是任意Object类型,比较耗内存。
  • HashMap有阈值(0.75F),当HashMap的元素数量达到:容量 * 0.75F,数组就需要扩容,浪费了部分内存空间。

2.SparseArray

两个数组:int[] mKeys 和 Object[] mValues。

2.1.时间

put:

二分查找确定key的index(mKeys数组是有序的):

  1. 有该key,替换value;
  2. 没有该key,如果index小于数组长度&&mValues数组对应index位置为DELETE,替换index位置的key和value(删除时mValues数组标记为DELETE);
  3. 上述条件都不满足,插入新的key和value,其后的元素往后移动。

get:

二分查找得到key的index,根据index获取value。

remove:

删除并不是真正的删除,而是标记为删除(mValues数组标记为DELETE),增删多的情况效率高。

总结:效率较高

2.2.空间

mKeys数组是int类型的,更加节省内存。

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

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

相关文章

【Java数据结构】Map和Set超详细两万字讲解(内含搜索树+哈希表)

🔒文章目录: 1.❤️❤️前言~🥳🎉🎉🎉 2. Map和Set的基础概念 3.Map的基础使用 4.Set的基础使用 5. TreeMap的本质——红黑树 5.1二叉搜索树的概念 5.2二叉搜索树的模拟实现 二叉搜索树——查找 二…

东莞网页设计结构图

东莞网页设计结构图是一个网页设计师在设计网站时使用的工具,用来展示网页的布局、内容结构和功能模块等信息。在设计一个网页时,网页设计师通常会首先制作一个网页设计结构图,以便更好地组织和规划网站的内容和功能。东莞网页设计结构图可以…

PFA的特点及焊接方法和应用领域

一、PFA特点: 1、外观半透明,易观察试剂情况; 2、耐高低温:-200~260℃; 3、耐腐蚀:耐强酸、强碱、王水、HF和各种有机溶剂; 4、防污染:本底值低,金属元素…

SpringBoot 整合 Spring Security 、JWT 实现认证、权限控制

​ 博客主页: 南来_北往 系列专栏:Spring Boot实战 前言 Spring Security 和 JWT 实现认证、权限控制是一种在Web应用中保障安全的重要手段。 Spring Security是一个功能强大的身份验证和访问控制框架,它提供了完善的认证机制和方法级的授权功能。…

手机维修--学习笔记(一)

最近觉得手机主板维修比较有意思,观看许多师傅的维修视频,并做笔记如下: 手机主板维修: 【手机电路板怎么修,师傅对着电路图一步一步讲解,看完受益匪浅】https://www.bilibili.com/video/BV13A411v7wL?v…

梯度和反向传播

一.梯度 在机器学习的时候都了解过了,梯度是一个向量,导数变化最快的方向 损失函数: 通过梯度使损失降到最 用ywxb举例也就是使用梯度来更新w的值,ww-学习率*梯度。大于零就减小,反之增大 二.反向传播 就比如搭积木…

【源码+文档+调试讲解】古风生活体验交流网站

摘 要 二十一世纪我们的社会进入了信息时代,信息管理系统的建立,大大提高了人们信息化水平。传统的管理方式对时间、地点的限制太多,而在线管理系统刚好能满足这些需求,在线管理系统突破了传统管理方式的局限性。于是本文针对这一…

24/8/5算法笔记 逻辑回归sigmoid

今日是代码对sigmoid函数的实现和运用 #linear_model线性回归 #名字虽然叫逻辑回归,作用于分类 #分类:类别 #回归:预测 from sklearn.linear_model import LogisticRegression 实现函数 import numpy as np import matplotlib.pyplot as pl…

Linux笔记-3()

目录 一、Linuⅸ实操篇-定时任务调度 二、Linuⅸ实操篇-Linuⅸ磁盘分区、挂载 三、Linux实操篇-网络配置 一、Linuⅸ实操篇-定时任务调度 1 crond任务调度---crontab进行定时任务的设置1.1 概述任务调度:是指系统在某个时间执行的特定的命令或程序。任务调度分类…

【python】OpenCV—Image Colorization

文章目录 1、CIELAB 色彩空间2、作色问题定义3、Caffe 模型4、代码实现——Image5、代码实现——Video6、参考 1、CIELAB 色彩空间 Lab颜色空间,也称为Lab色彩空间或CIELAB色彩空间,是一种基于人类视觉感知特性的颜色模型。它是在1931年国际照明委员会&…

渗透SQL注入

首先打开php: Less-1: 打开浏览器输入网址,进入靶场: 输入?id1查询: 使用order by查询数据表的列数: http://127.0.0.1/sqllab/less-1/?id1 order by 4 -- ​ http://127.0.0.1/sqllab/less-1/?id1 order by 3 -- 由此可得表…

基于paddleocr实现验证码识别——训练数据

一、项目介绍 验证码(CAPTCHA)用于区分用户是人类还是计算机程序(如机器人)。这是为了防止各种形式的自动化攻击和滥用。以下是需要验证码识别的几个主要原因: 1. 防止恶意破解密码 攻击者可能会使用自动化程序进行…

数据结构----------贪心算法

什么是贪心算法? 贪心算法(Greedy Algorithm)是一种在问题求解过程中,每一步都采取当前状态下最优(即最有利)的选择,从而希望导致最终的全局最优解的算法策略。 贪心算法的核心思想是做选择时&…

【深度学习】DeepSpeed,ZeRO 数据并行的三个阶段是什么?

文章目录 ZeRO实验实验设置DeepSpeed ZeRO Stage-2 实验性能比较进一步优化DeepSpeed ZeRO Stage-3 和 CPU 卸载结论ZeRO ZeRO(Zero Redundancy Optimizer)是一种用于分布式训练的大规模深度学习模型的优化技术。它通过分片模型状态(参数、梯度和优化器状态)来消除数据并行…

Flink异步IO 调用算法总是超时

记录一次使用Flink 异步调用IO 总是超时的bug 注&#xff1a;博主使用的版本就是&#xff1a;<flink.version>1.16.1</flink.version> 起因&#xff1a; 因公司业务需要&#xff0c;使用Flink对数据进行流式处理&#xff0c;具体处理流程就是&#xff0c;从kafka…

PageRank算法与TextRank算法

PageRank PageRank 是一种用于计算网页重要性的算法&#xff0c;其核心思想源自随机浏览模型。这个模型假设一个网络中的用户通过随机点击链接在网页之间跳转&#xff0c;并根据网页的链接结构计算每个网页的重要性。 假设三个网页按以下方式连接&#xff0c;计算每个网页的PR值…

【零基础实战】基于物联网的人工淡水湖养殖系统设计

文章目录 一、前言1.1 项目介绍1.1.1 开发背景1.1.2 项目实现的功能1.1.3 项目硬件模块组成1.1.4 ESP8266工作模式配置 1.2 系统设计方案1.2.1 关键技术与创新点1.2.2 功能需求分析1.2.3 现有技术与市场分析1.2.4 硬件架构设计1.2.5 软件架构设计1.2.6 上位机开发思路 1.3 系统…

Robot Operating System——深度解析单线程执行器(SingleThreadedExecutor)执行逻辑

大纲 创建SingleThreadedExecutor新增Nodeadd_nodetrigger_entity_recollectcollect_entities 自旋等待get_next_executablewait_for_workget_next_ready_executableTimerSubscriptionServiceClientWaitableAnyExecutable execute_any_executable 参考资料 在ROS2中&#xff0c…

ARM知识点二

一、指令 指令的生成过程 指令执行过程示例 if (a 0) {x 0; } else {x x 3; } //翻译为 cmp r0,#0 MOVEQ R1,#0 ADDGT R1,R1,#3指令获取&#xff1a;从Flash中读取 CMP R0, #0&#xff0c;控制器开始执行。 指令解码&#xff1a;解码器解析 CMP 指令&#xff0c;ALU比较R…

DAMA学习笔记(十)-数据仓库与商务智能

1.引言 数据仓库&#xff08;Data Warehouse&#xff0c;DW&#xff09;的概念始于20世纪80年代。该技术赋能组织将不同来源的数据整合到公共的数据模型中去&#xff0c;整合后的数据能为业务运营提供洞察&#xff0c;为企业决策支持和创造组织价值开辟新的可能性。与商务智能&…