1. 底层数据结构
  • 数组+链表+红黑树(JDK 1.8+):
    • 数组(Node[] table)存储桶(bucket),每个桶是链表或红黑树的头节点。
    • 链表解决哈希冲突,当链表长度 ≥ 8 且数组容量 ≥ 64 时转为红黑树(查找复杂度从O(n)优化到O(log n))。
2. 核心方法原理
  • put()流程

    1. 计算键的哈希值(hash(key)),通过扰动函数(高16位异或低16位)减少冲突。
    2. 定位桶位置:index = (n - 1) & hash
    3. 若桶为空直接插入;若冲突则遍历链表/红黑树:
      • 相同key:覆盖旧值;
      • 不同key:尾插法(JDK 1.8)或树化(链表长度 ≥ 8)。
    4. 扩容条件:元素数 > 容量 × 负载因子(默认0.75)。
  • get()流程:通过哈希值定位桶,遍历链表/红黑树,用equals()匹配key。

3. 扩容机制
  • 容量翻倍:新建2倍数组,重新哈希迁移数据(JDK 1.8优化:仅需判断高位哈希位,减少重新计算)。
  • 线程不安全问题:多线程扩容可能导致死循环(JDK 1.7头插法)或数据丢失。
4. 线程安全与替代方案
  • 非线程安全:多线程操作需使用ConcurrentHashMap(分段锁/CAS)或Collections.synchronizedMap
5. 关键参数与优化
  • 初始容量:默认16,建议预估设置以减少扩容开销。
  • 哈希冲突优化:重写hashCode()equals()确保键对象分布均匀。
6. 与其他Map对比
特性HashMapLinkedHashMapTreeMap
顺序性无序插入/访问顺序键的自然/自定义排序
线程安全
适用场景高频增删查需保留插入顺序需排序或范围查询

总结:HashMap通过哈希表实现高效查询(平均O(1)),但需注意哈希冲突、扩容成本及线程安全问题。JDK 1.8引入红黑树优化极端情况性能,适用于单线程高频操作场景。

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

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

相关文章

ToT:思维树:借助大语言模型进行审慎的问题求解

摘要 语言模型正日益被部署于广泛任务中的通用问题求解,但在推理阶段仍受限于 token 级、从左到右的决策过程。这意味着在需要探索、战略前瞻,或初始决策起关键作用的任务中,语言模型可能表现不佳。为克服这些挑战,我们提出了一种…

Web3 + RWA 餐饮数字化解决方案白皮书(试点版)

一、背景:从“用户”到“共创股东”,重构本地生活新逻辑 ✨ 項目愿景: “用一顿饭,链接一个社群;用一次消费,绑定一份权益”。 传统商业以“交易”为中心,未来商业则以“关系 价值流转”为核…

MCU的模拟输入ADC引脚如何实现采样时间与阻抗匹配

在MCU的模拟输入ADC引脚中,实现采样时间与阻抗匹配是关键的设计环节,直接影响采样精度。以下是分步说明: 【】理解信号源阻抗与采样时间的关系 • 信号源阻抗(Rs):外部信号源的输出阻抗(如传感器…

等价矩阵 线性代数

所谓等价矩阵,就是说其秩相同的矩阵。 例题 A和B等价就是求A和B的秩,其实就是要求B的秩了,因为目标已经告诉你了A和B的秩是一样的。那么怎么求B的秩呢?我们现在只有一种方法求其秩,就是通过把其经过初等变换之后符合标…

30.设计模式的优缺点

原文地址:设计模式的优缺点 更多内容请关注:智想天开 一、设计模式的优点 1. 提高代码复用性与可维护性 复用性: 设计模式提供的是抽象的解决方案,可以在多个项目中重复应用,避免重复造轮子。例如,工厂模式封装了对象…

Python 爬虫实战 | 国家医保

一、国家医保 1、目标网站 网址:https://fuwu.nhsa.gov.cn/nationalHallSt/#/search/drug-directory目标数据:获取药品信息 2、网站特点 服务端返回加密数据,客户端发送请求携带的载荷也是加密的 3、定位解密入口 可以通过关键字encDa…

OpenCV CUDA模块设备层----计算向量的平方根函数sqrt

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 OpenCV 的 CUDA 设备函数(device function),用于在 GPU 上计算一个 uchar4 类型向量的平方根,并返…

鸿蒙应用开发:HTTP访问网络

一、HTTP概述 在许多场景下,我们的应用需要从服务端获取数据,例如,天气应用需要从天气服务器获取天气数据。新闻应用需要从新闻服务器获取最新的新闻咨询,通过HTTP数据请求,我们可以将互联网上的信息展示在应用中&…

【Elasticsearch】refresh与提交

在Elasticsearch中,Translog日志的提交确实涉及到与刷新(Refresh)时写入Lucene段的数据进行合并,并最终写入磁盘。以下是详细的步骤和解释: 一、Translog日志的提交过程 1. 刷新(Refresh)操作 …

服务器异常宕机或重启导致 RabbitMQ 启动失败问题分析与解决方案

服务器异常宕机或重启导致 RabbitMQ 启动失败问题分析与解决方案 一、深度故障诊断与解决方案1. 权限配置不当故障2. 端口占用故障3. 数据目录残留故障 二、故障类型对比与诊断矩阵三、完整恢复流程(10步法)四、风险规避与最佳实践🛡️ 数据保…

车载以太网都有什么协议?

目录 一、物理层协议(Physical Layer)二、数据链路层协议(Data Link Layer)三、网络层协议(Network Layer)四、传输层协议(Transport Layer)五、应用层协议(Application Layer)六、车载网络融合协议七、标准化组织八、协议分层总结表九、趋势与未来协议车载以太网涉及…

设计模式之外观模式:简化复杂系统的优雅之道

设计模式之外观模式:简化复杂系统的优雅之道 今天我们来深入探讨设计模式中的外观模式(Facade Pattern)。想象一下,你走进一家高档餐厅,只需要告诉服务员"我要一份A套餐",而不需要关心厨房里厨师…

《Python 架构之美:三大设计模式实战指南》

《Python 架构之美:三大设计模式实战指南》 在软件世界中,设计模式是经验的结晶,它为开发者提供了解决重复问题的通用模板。尤其在 Python 这种灵活而强大的语言中,设计模式并非“死规矩”,而更像“编程哲学”,为我们解构复杂系统、提升代码可维护性提供了宝贵思路。 本…

力扣打卡第十八天 判定平衡二叉树

110. 平衡二叉树 给定一个二叉树,判断它是否是 平衡二叉树 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:true示例 2: 输入:root [1,2,2,3,3,null,null,4,4] 输出:false示例 3&#xf…

Python 物联网(IoT)与边缘计算开发实战(1)

Python 物联网(IoT)与边缘计算开发实战 https://www.python.org/static/community_logos/python-logo-master-v3-TM.png 物联网基础与硬件交互 Raspberry Pi GPIO控制 python import RPi.GPIO as GPIO import time # 设置GPIO模式 GPIO.setmode(GPIO.BCM) GPIO.setwarnings(F…

高通SG882G平台(移远):1、编译脚本

文档提供的编译,有点问题。所以我重新整理了脚本。 build-lib.sh #!/bin/bashfunction prepare_build() {if [ ! -d download ]; thenmkdir downloadfilocal MODIFIED_DIRfile-replacelocal FILE_NAMEset_bb_env.shcp ${MODIFIED_DIR}/${FILE_NAME} \poky/qti-con…

Mac电脑 触摸板增强工具 BetterTouchTool

BetterTouchTool mac版,是一款触摸板增强工具,允许用户使用各种手势来控制其计算机。 Bettertouchtool mac是一个小而高效的macOS应用程序,旨在帮助您为手势定义快捷方式。 此外,Bettertouchtool可用于使用常规鼠标和键盘快捷键…

LSTM(Long Short-Term Memory)模型的深度解析

在6.28号我发了一个博客《RNN(循环神经网络)与LSTM(长短期记忆网络)输出的详细对比分析》,但是我并未详细讲解LSTM,LSTM是循环神经网络中的一个模型,然而通过这篇博客给大家深度解析一下LSTM&am…

WebRTC 安全性分析研究

一、概述 本文着重分析 WebRTC 的安全性,分析其安全性考虑及安全性实现,回答了以下问题: WebRTC 加密过程需要或依赖 CA (Certificate Authority)吗? 不需要 CA, 但可能依赖 CA.DTLS-SRTP 加密机制中, DTLS 与 SRTP 的关系是什么? DTLS 实现秘钥交换…

阿里云操作系统控制台如何解决三大OS运维难题?

背景 操作系统运维常常遇到以下问题: 1.问题定界浪费大量人力:当业务出现问题时,客户在不清楚是操作系统问题还是业务问题时,往往会拉上所有相关团队一起排查,浪费人力。 2.问题定位时间长:通过操作系统…