HashMap 与二叉树:数据结构的进化之路

简介: 深入解析 HashMap 与二叉树的关系,理解 JDK 1.8 中链表转红黑树的优化原理

HashMap 与二叉树:数据结构的进化之路

在数据结构的世界中,HashMap 和二叉树是两种核心结构,它们各有所长,而 JDK 1.8 的 HashMap 更是将两者巧妙结合。

二叉树基础

二叉树是每个节点最多有两个子节点的树结构:

class TreeNode {
   
    int val;
    TreeNode left;
    TreeNode right;
}

二叉搜索树 (BST)

  • 左子树所有节点值 < 根节点值
  • 右子树所有节点值 > 根节点值
  • 查找时间复杂度:O(log n) ~ O(n)

HashMap 的演进

传统实现:数组 + 链表

早期 HashMap 使用拉链法解决哈希冲突:

// 计算桶位置
int index = hash(key) & (table.length - 1);
// 遍历链表查找
for (Node e = table[index]; e != null; e = e.next) {
   
    if (e.key.equals(key)) return e.value;
}

问题:链表过长时,查找退化为 O(n)

JDK 1.8 优化:引入红黑树

当链表长度 >= 8 且数组容量 >= 64 时,链表转为红黑树:

if (binCount >= TREEIFY_THRESHOLD - 1)
    treeifyBin(tab, hash);

红黑树的优势

红黑树是一种自平衡二叉搜索树,保证:

  • 插入、删除、查找均为 O(log n)
  • 最长路径不超过最短路径的 2 倍

HashMap结构图

性能对比

操作 链表 红黑树
查找 O(n) O(log n)
插入 O(1) O(log n)
删除 O(n) O(log n)

总结

HashMap 与二叉树的结合是数据结构设计的典范。理解它们的关系,能帮助我们在实际开发中做出更好的技术选型。

相关文章
|
3月前
|
人工智能 前端开发 算法
大厂CIO独家分享:AI如何重塑开发者未来十年
在 AI 时代,若你还在紧盯代码量、执着于全栈工程师的招聘,或者仅凭技术贡献率来评判价值,执着于业务提效的比例而忽略产研价值,你很可能已经被所谓的“常识”困住了脚步。
1862 89
大厂CIO独家分享:AI如何重塑开发者未来十年
|
机器学习/深度学习 人工智能 算法
【视觉智能产品速递——人物动漫化能力上新】
VIAPI—人物动漫化!新增风格版本发布。 产品功能:人物动漫化——输入一张人物图像,生成其二次元卡通形象,返回卡通化后的结果图像。 🔥🔥🔥 本次更新风格:国风工笔画、港漫风
1671 3
【视觉智能产品速递——人物动漫化能力上新】
|
JavaScript
Bert-vits2-v2.2新版本本地训练推理整合包(原神八重神子英文模型miko)
近日,Bert-vits2-v2.2如约更新,该新版本v2.2主要把Emotion 模型换用CLAP多模态模型,推理支持输入text prompt提示词和audio prompt提示语音来进行引导风格化合成,让推理音色更具情感特色,并且推出了新的预处理webuI,操作上更加亲民和接地气。
Bert-vits2-v2.2新版本本地训练推理整合包(原神八重神子英文模型miko)
|
并行计算 API C++
又欲又撩人,基于新版Bert-vits2V2.0.2音色模型雷电将军八重神子一键推理整合包分享
Bert-vits2项目近期炸裂更新,放出了v2.0.2版本的代码,修正了存在于2.0先前版本的重大bug,并且重炼了底模,本次更新是即1.1.1版本后最重大的更新,支持了三语言训练及混合合成,并且做到向下兼容,可以推理老版本的模型,本次我们基于新版V2.0.2来本地推理原神小姐姐们的音色模型。
又欲又撩人,基于新版Bert-vits2V2.0.2音色模型雷电将军八重神子一键推理整合包分享
|
算法 程序员
从《阴阳师》到《原神》,抽卡中的程序算法
收集类的抽卡手游,是玩家们喜闻乐见的一类游戏,他们背后又有哪些程序算法?我们一起来探讨
5064 1
从《阴阳师》到《原神》,抽卡中的程序算法
|
前端开发 小程序 API
2025最新社区论坛小程序前端uin后端ThinkPHP打造同城社交论坛行业圈子交流模式
定位本地化实名社交,融合LBS同城生活与行业兴趣圈子。支持发帖、私信、智能推荐,涵盖本地资讯与垂直交流,构建城市邻里与职业人脉双生态,助力用户发现身边事、拓展同行圈。
1066 0
2025最新社区论坛小程序前端uin后端ThinkPHP打造同城社交论坛行业圈子交流模式
|
3月前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
1558 59
Meta SAM3开源:让图像分割,听懂你的话
|
3月前
|
算法 Java 开发者
Java 中 HashMap 的底层实现原理详解
深入分析 Java HashMap 的底层实现原理,包括数据结构、hash 算法和扩容机制
Java 中 HashMap 的底层实现原理详解
|
2月前
|
Java Nacos Sentinel
SpringCloud 微服务解决方案:企业级架构实战
全面介绍 SpringCloud 微服务解决方案,涵盖服务注册发现、网关路由、熔断限流、分布式事务等企业级实践
|
3月前
|
缓存 编解码 并行计算
《AMD显卡游戏适配手册:解决画面闪烁、着色器编译失败的核心技术指南》
本文聚焦游戏跨显卡适配中的典型痛点,针对NVIDIA显卡运行流畅、AMD显卡却出现画面闪烁、着色器编译失败等问题,深度拆解底层成因与根治方案。文章指出,问题核心源于AMD与NVIDIA的硬件架构(SIMD/SIMT)、指令集支持、驱动优化方向的本质差异,以及开发时单一显卡适配的思维惯性。通过驱动版本精准选型与残留清理、着色器编译规则降级兼容与分卡预编译、纹理压缩格式与渲染设置针对性调整、双显卡同步测试与长效迭代体系搭建等六大核心逻辑,提供从底层技术优化到实操落地的全流程指南。
283 7