java集合框架剖析(7)——HashMap

Java集合框架核心解析与性能优化实践 Java集合框架是处理数据结构的核心工具,通过动态数组、链表和哈希表等基础数据结构实现高效数据管理。其核心原理包括时间复杂度优化(如HashMap的O(1)查询)和线程安全机制(如ConcurrentHashMap的分段锁)。在工程实践中,合理选择ArrayList/LinkedList或HashMap/TreeMap等实现类,直接影响系统性能表现。典型应用场景涵盖电商商品检索(HashSet去重)、金融订单处理(CopyOnWriteArrayList线程安全)等高频需求。特别在JDK8后,Stream 阅读详情

这里写图片描述
HashMap不仅继承了AbstractMap,而且实现了Map、Cloneable和Serializable接口,所以HashMap也可以序列化。另外,HashMap是非同步的,但是我们可以通过Collections类的静态方法synchronizedMap获得线程安全的HashMap。即:
这里写图片描述
总览一下HashMap的主要接口:
这里写图片描述

存储结构

这里写图片描述
这里写图片描述
HashMap的底层主要是基于数组和链表实现的,它之所以有相当快的查询速度主要是因为它是通过计算散列码来决定存储位置的。HashMap中主要是通过key的hashCode来计算hash值,然后通过hash值选择不同的数组来存储。只要hashCode相同,计算出来的hash值就一样,如果存储对象多了,就有可能不同的对象计算出来的hash值是相同的,这就出现了所谓的hash冲突,解决hash冲突的方法很多。HashMap的底层是通过链表来解决hash冲突的:
这里写图片描述

Entry实体类

Entry其实是个单向链表:它是“HashMap链式存储法”对应的链表。
它实现了Map.Entry接口,也就是实现了getKey()、getValue()、setValue(V value)、equals(Object o)和hashCode()这些方法。
这里写图片描述
HashMap其实就是一个存储Entry的数组,Entry对象包含了键和值,其中next也是一个Entry对象,用来处理hash冲突的,形成一个链表。

源码

属性

这里写图片描述

构造函数

这里写图片描述

存取方法

put

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

get

这里写图片描述

遍历

HashMap的遍历方式比较单一,一般分两步走:

  1. 获得Entry或key或value的Set集合;
  2. 通过Iterator迭代器遍历此Set集合。

这里写图片描述

【Java 硬核知识:集合框架深度解剖与性能陷阱】HashMap 夺命连环问:死循环、哈希碰撞与红黑树阈值 摘要:本文深入剖析 Java 集合框架中的 HashMap,聚焦于 HashMap 常见的几个关键问题,包括 Java 1.7 头插法导致的死循环复现、扰动函数的优化与负载因子的计算,以及 ConcurrentHashMap 从分段锁升级为 CAS + sync 的演进过程。通过详细的原理阐述、实操流程和完整代码示例,帮助读者全面理解 HashMap 的底层机制和性能陷阱,为在实际开发中正确使用 HashMap 提供坚实的理论和实践基础。 阅读详情

相关推荐

神经网络(十五)在VS Code下搭建PyTorch环境

pytorch在vscode中的配置和使用

就随便写写.... 5万+

HashMap集合的特性

HashMap的分析: 1、HashMap是可以序列化的。是线程不安全的。 2、HashMap的底层主要是基于数组和链表实现的,它之所以有相当快的查询速度主要是因为它是通过计算散列码来决定存储位置的。 3、HashMap中主要是通过key的hashCode来计算hash值,然后通过hash值选择不同的数组来存储。只要hashCode相同,计算出来的hash值就一样,如果存储对象多了,就有可能不同的...

qq_34409900的博客 2686

OpenCv案例(七): 基于OpenCvSharp计算图像的清晰度(自动对焦)

自动对焦,其实是对相机成像的清晰值得计算,若对焦不清晰,成像的清晰度低,视觉效果模糊。若是在工业检测行业,对焦不准确,可能会造成严重后果;对焦准确的图像,其清晰度高,对比度鲜明,层次明显。

qq_37835727的博客 7113

HashMap源码分析

只要两个元素的key计算的哈希码值相同就会发生哈希碰撞。jdk8前使用链表解决哈希碰撞。jdk8之后使用链表+红黑树解决哈希碰撞。

小鲁蛋的博客 623

产业大脑+未来工厂:揭秘浙江数字经济系统的5大核心场景搭建指南

本文深入解析了“产业大脑+未来工厂”这一浙江数字经济系统的核心范式,并提供了五大核心场景的实战搭建指南。文章详细阐述了从供应链协同、产能共享到产品创新、质量追溯及绿色低碳等关键场景的构建逻辑与技术架构,旨在帮助企业实现从技术驱动到场景驱动的价值落地,破解数据孤岛难题,提升产业链整体效能。

mac99的博客 666

ABAQUS地应力平衡方法详解

在岩土工程数值分析中,首先要对模型进行初始地应力平衡计算。ABAQUS有限元软件有五种初始地应力平衡方法:①自动平衡法;②关键字定义初始地应力法(或在界面操作);③ODB导入法;④初始应力提取法;⑤用户子程序SIGNI法。由于第五种方法需要一定的编程基础,操作起来太复杂不易掌握,故本文只讲解较为实用的前四种平衡方法。 地应力平衡的目标:使土层在自重作用下的变形很小----不存在初始位移,只存在初始应力。一般情况下,最大位移达到10-4次幂以下就可以了。 ①自动平衡法 (如果土体采用线弹性,且比较规则,

m0_69808458的博客 3万+

java hashmap 实现 序列化,HashMap不可序列化

HashMap with Serializable key/value is supposed to be Serializable.But it's not working for me. Tried some other IO streams. None works.Any suggestion?Test codepublic class SimpleSerializationTest {@...

weixin_29799209的博客 655

Robocopy 参数进阶:/MIR 镜像同步与 /PURGE 删除操作的风险规避指南

本文深入解析Robocopy的/MIR镜像同步与/PURGE删除操作的高级用法及风险规避策略。通过实际案例和四重防护机制,指导用户安全实现目录同步,避免数据丢失风险,特别适用于远程主机间的数据复制与备份场景。

weixin_33462927的博客 356

Java中List或者HashMap对象-序列化和反序列化并附读写文件操作

关于常用的序列化工具可以看下文章 浅析若干Java序列化工具 闲言少叙,直接上代码。 Json格式的序列化和反序列化使用alibaba的Fastjson,Maven项目需要引用包 com.alibaba fastjson 1.1.25 之后就可以直接写代码了 Listlist=maps.getDomesticCi

lcanghai的博客 2万+

看完这篇爽文我终于学会了示波器(一)

示波器基础篇的介绍,希望对你有用,下次分享一下如何测试。

qq_45508321的博客 973

MBD-从一个示例看代码生成过程(rtw文件、TLC语言)

大概介绍了MBD代码生成流程,rtw文件、TLC语言

小胡同学的工程师学习之路 4214

HashMap如何实现序列化

/** * Save the state of the <tt>HashMap</tt> instance to a stream (i.e., * serialize it). * * @serialData The <i>capacity</i> of the HashMap (the leng...

weixin_30765319的博客 2411

关于IBV_WR_RDMA_WRITE_WITH_IMM的理解

对于IBV_WC_RECV_RDMA_WITH_IMM的描述是这样的,也就是说并不需要sge,所以下发的sge,可以是NULL,个数可以是0。(1)需要下发post_recv,但是下发是post_recv当中的sge的地址可以是空,sge个数可以是0。伪代码,实际的rkey和addr已经通过socket交换。并且poll_cq时,有返回,在这篇文章当中对于poll_cq时,主要区别点有两个,这个是对于接收端而言。(2)可以带即时数据,

qq_38158479的博客 2418

java集合

HashMap中,如果key经过hash算法得出的数组索引位置全部不相同,即Hash算法非常好,那样的话,getKey方法的时间复杂度就是O(1),如果Hash算法技术的结果碰撞非常多,假如Hash算极其差,所有的Hash算法结果得出的索引位置一样,那样所有的键值对都集中到一个桶中,或者在一个链表中,或者在一个红黑树中,时间复杂度分别为O(n)和O(lgn)。当然Java里的数组是无法自动扩容的,方法是使用一个新的数组代替已有的容量小的数组,就像我们用一个小桶装水,如果想装更多的水,就得换大水桶。

weixin_72525373的博客 1012

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析 (转)

阅读前提:本文分析的是源码,所以至少读者要熟悉它们的接口使用,同时,对于并发,读者至少要知道 CAS、ReentrantLock、UNSAFE 操作这几个基本的知识,文中不会对这些知识进行介绍。Java8 用到了红黑树,不过本文不会进行展开,感兴趣的读者请自行查找相关资料。 Java7 HashMap HashMap 是最简单的,一来我们非常熟悉,二来就是它不支持并发操作,所以源码也非常简单。...

weixin_33912445的博客 92

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【集合框架HashMap底层原理】

Java8的HashMap通过哈希表+链表+红黑树实现高效键值存储。核心扩容机制在size超过threshold(容量×负载因子0.75)时触发,新容量翻倍并重新分布元素。Java8优化了元素迁移过程,利用位运算(hash&oldCap)将元素分为低位和高位链表,避免全量rehash。当链表长度达8且容量≥64时转为红黑树,提升极端情况性能;节点减至6时转回链表。这些设计平衡了空间效率与时间复杂度,其中0.75负载因子基于泊松分布,在冲突概率与空间利用率间取得最优解。

weixin_64178283的博客 1081

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java 集合面试题从数据结构到 HashMap 源码剖析详解及常见考点梳理

摘要 Java集合框架是开发中的核心知识,本文从基础概念到源码层面进行了系统解析。首先介绍了Collection和Map两大接口体系,对比了ArrayList、LinkedList、HashSet等实现类的特点。重点剖析了HashMap的底层数据结构演变:JDK1.7采用数组+链表结构,而JDK1.8优化为数组+链表+红黑树组合,有效提升了查询性能。详细解读了HashMap的关键源码实现,包括哈希计算、扩容机制等核心流程。最后通过订单管理系统的实际案例,展示了HashMap的高效应用场景。全文既有理论深度,

sss191s的博客 1021

java容器集合源码分析

Map接口源码分析 文章目录Map接口源码分析HashMap底层实现HashMap源码分析LinkedHashMap源码分析注意Set接口源码分析HashSet底层实现`LinkedHashSet`底层实现List接口源码分析ArrayList底层实现LinkedList底层实现Vector底层实现总结 HashMap底层实现 JDK7中,HashMap使用数组+链表的结构,JDK8中,HashMap使用数组+链表+红黑树的结构。 HashMap添加数据的过程梳理,从JDK7为例梳理过程,并分析JD

三筒记的博客 166

JAVA集合框架

目录 1.1目录 1.2为什么使用集合? 1.3集合的架构 1.4 List集合 - ArrayList 1.4.0创建集合对象 1.4.1添加的操作 1.4.2 删除的操作 1.4.3修改的操作 1.4.4查询操作 1.4.5ArrayList底层源代码 1.5LinkedList 1.5.1添加 1.5.2 删除操作 1.5.3修改操作 1.5.4查询操作 1.6 Set集合 1.6.1 HashSet集合 1.6.1.1 创建HashSet对象 1.6.1...

lpt1314的博客 269

Java HashMap和ConcurrentHashMap源码解析

阅读建议:四节基本上可以进行独立阅读,建议初学者可按照 Java7 HashMap -&amp;amp;gt; Java7 ConcurrentHashMap -&amp;amp;gt; Java8 HashMap -&amp;amp;gt; Java8 ConcurrentHashMap 顺序进行阅读,可适当降低阅读门槛。 阅读前提:本文分析的是源码,所以至少读者要熟悉它们的接口使用,同时,对于并发,读者至少要知道 CAS、Reentrant...

LMY413231718的博客 243

Java集合看完这个再去看面试题

文章目录集合概览ListList概览ArrayList的源码分析(掌握)jdk1.7时的ArrayListjdk1.8时的ArrayList的变化LinkedList的源码分析(了解)Vector的源码分析(了解)SetSet概览HashSet的源码分析(掌握)HashSet jdk1.7与1.8的不同Map 集合概览 Collection接口:单列集合,用来存储一个一个的对象 - List接口:存储有序的、可重复的数据。->ArrayList、LinkedList、Vector - Set接口:存

weixin_41639009的博客 400

Java集合框架核心原理与面试高频考点解析

Java集合框架是数据处理的基础组件,其核心设计思想是通过接口与实现分离来支持多种数据结构。从数据结构维度看,动态数组(ArrayList)与双向链表(LinkedList)体现了时间与空间的经典权衡;哈希表(HashMap)通过扰动函数和红黑树优化解决了哈希冲突问题。在并发场景下,ConcurrentHashMap采用分段锁和CAS实现了线程安全。理解这些原理对工程实践至关重要,比如ArrayList扩容机制影响性能、HashMap加载因子0.75的数学依据等。掌握集合框架不仅能优化代码效率,更是Java

weixin_29231221的博客 231

Java基础之集合

全面分析HashMap一、JDK7中的HashMap1. 基本数据结构2. 元素的添加过程3. 扩容二、 JDK8中的HashMap1. 基本数据结构2. 元素的添加过程3. 扩容4. 红黑树的使用4.1 红黑树的作用4.2 红黑树的使用4.3 红黑树的阈值4.4 红黑树的退化三、HashMap的细节分析1. 索引的计算2. hash()方法的必要性3. 数组容量的选择4. 加载因子为何是0.755. 对key的要求四、HashMap并发情况下存在的问题1. 共性问题:数据丢失2. JDK7问题:并发死链2

weixin_44446626的博客 762

集合重要知识点

Vector 数组结构,线程安全ArrayList 数组结构,非线程安全LinkedList 链表结构,非线程安全。

weixin_43943624的博客 879

第九章_Java集合框架

文章目录Java集合框架Collection接口java.util.Iterator接口Collection子接口:List接口ArrayList的源码分析:**LinkedList的源码分析:****Vector的源码分析:**Collection子接口:SetHashSettreeSetMap接口HashMap底层实现原理HashMap在jdk7中实现原理:HashMap在jdk8中实现原理:HashMap底层属性说明:LinkedHashMap底层实现原理:TreeMap底层实现原理:Properti

Anan的博客 422

Java7/8 中的HashMap 和 ConcurrentHashMap

1.导读        本文分析的是源码,所以至少读者要熟悉他们的接口使用,同时,对于并发,读者至少要知道 CAS、ReentrantLock、UNSAFE操作这几个基本知识,文中不会对这些知识进行介绍。Java8 用到了红黑树,不过本文不会进行展开,感兴趣的读者请自行查找相关资料。 2.hash表        在讲HashMap之前,我们先来了解下他们底层实现的一种数据结构——Hash ...

suchahaerkang的博客 249
上一篇: Java集合框架剖析(6)——Map架构
下一篇: java并发(3)——无锁
sicofield
博客等级 码龄18年 169粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值