当前位置: 首页 > article >正文

HashMap的位操作是什么?HashSet 的 contains 方法复杂度是多少?红黑树简单讲一下?

一、HashMap 的位操作设计

HashMap 使用位运算优化哈希计算与索引定位,核心场景如下:

  1. 哈希扰动函数
    计算键的哈希值时,将高16位与低16位异或:

    static final int hash(Object key) {
        int h;
        return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
    }
    

    作用:增加哈希值的随机性,减少因低位重复导致的冲突(例如低位相同的哈希值经过扰动后分布更均匀)。

  2. 索引定位优化
    通过 (n - 1) & hash 计算数组下标(n为数组长度)。
    关键点

    • 数组长度 n 必须为2的幂(如16、32),保证 n-1 的二进制全为1(如15→0b1111),此时按位与等效于取模运算,但效率更高。
    • 例如:哈希值为 0b10100101n=16,计算得 15 & 0b10100101 = 0b0101(即下标5)。

二、HashSet 的 contains 方法复杂度

HashSet 的 contains() 方法底层依赖 HashMap 的键查找,复杂度与哈希冲突情况相关:

  • 理想情况:哈希分布均匀时,时间复杂度为 O(1)
  • 哈希冲突时
    • 链表:退化至 O(n)(如所有元素哈希冲突形成长链表)。
    • 红黑树:优化为 O(log n)(链表长度超过8且数组容量≥64时转换为红黑树)。

底层实现

// HashSet 源码中的 contains 方法
public boolean contains(Object key) {
    return map.containsKey(key);  // 调用 HashMap 的 containsKey
}

三、红黑树的核心特性与作用

红黑树是 HashMap 在哈希冲突严重时的优化数据结构,其特性与优势如下:

  1. 核心特性

    • 节点颜色:非红即黑。
    • 根节点与叶子:根节点必须为黑色,叶子节点(NIL节点)视为黑色。
    • 红色节点约束:红色节点的子节点必须为黑色(确保无连续红色节点)。
    • 黑色高度平衡:从任一节点到其所有叶子路径的黑色节点数相同。
  2. 操作复杂度

    • 插入/删除/查找:时间复杂度均为 O(log n),优于链表(O(n))。
    • 旋转次数:相比 AVL 树,红黑树放宽平衡条件,减少旋转次数,更适合频繁修改的场景。
  3. 在 HashMap 中的应用

    • 转换条件:链表长度 >8 且数组容量 ≥64 时,链表转为红黑树;节点数 <6 时退化为链表。
    • 优势:避免恶意哈希攻击导致性能骤降(如大量哈希冲突使链表退化为 O(n) 查询)。

总结对比

维度HashMap 位操作HashSet 的 contains红黑树
核心目的减少哈希冲突,快速定位数组下标快速判断元素是否存在解决哈希冲突导致的查询性能问题
时间复杂度O(1)(无冲突时)O(1)/O(log n)(冲突优化后)插入/删除/查找均为 O(log n)
典型应用场景所有键值对存储操作集合元素去重与快速查找哈希冲突严重时的链表替代方案

在这里插入图片描述


http://www.kler.cn/a/600560.html

相关文章:

  • H3C交接机初始基本配置
  • 【Java】readUnsignedShort()与readShort()
  • 基于springboot的地方美食分享网站(全套)
  • 《自动化开发之路:使用 Jenkins、GitLab CI 与 GitHub Actions 构建高效 CI/CD 流水线》
  • Oracle-rman restore遭遇RMAN-03002与ORA-19563
  • java基础自用笔记:异常、泛型、集合框架(List、Set、Map)、Stream流
  • protobuf为什么快
  • ESP-SPARKBOT AI 智能机器人:v1.2 全流程复刻指南
  • 网络基础-路由器和交换机工作配置
  • 【测试报告】论坛系统
  • 新书速览|OpenCV计算机视觉开发实践:基于Python
  • 跨境选品利器:基于速卖通API实时监控爆款商品价格与库存波动
  • 3.25-2request库
  • MATLAB 2024b深度学习,图神经网络(GNN)
  • 正弦函数的连续傅里叶变换正弦序列的DTFT
  • HarmonyOS 之 @Require 装饰器自学指南
  • DeepSeek-V3-0324 模型发布:开源 AI 性能再攀高峰,推理与编码能力逼近顶级闭源模型
  • python康复日记-request库的使用,爬虫自动化测试
  • ToolsSet之:快捷键和速查表
  • VS Code连接远程服务遇到的问题