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.rhkb.cn/news/40003.html

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

相关文章

软件开发过程中常用的调试工具(gdb)

gdb 因为我们公司其中脚本中有rk的gdb调试工具脚本&#xff0c;内部只需要将其打开后进行编译即可&#xff1a; 需要将编译出来的cvr_app 第一种&#xff1a;使用gdb将app给跑起来&#xff1a;gdb cvr_app 然后在出现问题时&#xff1a; 输入bt&#xff0c;可以打印出当前…

S32K144外设实验(七):FTM输出多路互补带死区PWM

文章目录 1. 概述1.1 时钟系统1.2 实验目的2. 代码的配置2.1 时钟配置2.2 FTM模块配置2.3 输出引脚配置2.4 API函数调用1. 概述 互补对的PWM输出是很重要的外设功能,尤其应用再无刷电机的控制。 1.1 时钟系统 笔者再墨迹一遍时钟的设置,因为很重要。 FTM的CPU接口时钟为SY…

Qt6相对Qt5的主要提升(AI总结)

我&#xff1a; Qt 6 相对于5 有哪些新功能&#xff1f; Qt 6 相对于 Qt 5 有诸多新功能和改进&#xff0c;以下是主要的新增特性&#xff1a; 1. 架构和核心库的重构 模块化设计&#xff1a;Qt 6 采用了更加灵活的模块化设计&#xff0c;开发者可以按需引入必要的功能模块&a…

一文解读DeepSeek的安全风险、挑战与应对策略

引言 DeepSeek作为中国领先的AI大模型提供商&#xff0c;凭借其开源、低成本和高性能的优势&#xff0c;迅速在全球AI市场占据重要地位。然而&#xff0c;随着其应用范围的扩大&#xff0c;DeepSeek在数据安全、模型漏洞、网络攻击等方面面临严峻挑战。本文基于最新公开资料&am…

文生图语义识别插件使用(controlnet)

1. 插件下载(github) https://github.com/Mikubill/sd-webui-controlnet https://github.com/lllyasviel/ControlNet2. 模型下载(hugging face) https://github.com/Mikubill/sd-webui-controlnet/wiki/Model-download https://huggingface.co/bdsqlsz/qinglong_controlnet-l…

论华为 Pura X 折叠屏性能检测

在科技浪潮中&#xff0c;折叠屏手机以其创新形态掀起市场热潮。华为 Pura X 作为华为最新折叠手机&#xff0c;承载前沿科技与精湛工艺&#xff0c;成为行业焦点。它融合先进折叠屏技术与优质材质&#xff0c;致力于打破传统手机使用边界&#xff0c;为用户开启全新体验。但产…

多路转接Poll

在之前我们讲过select是最古老的多路转接方案&#xff0c;古老就意味着他不是很方便使用&#xff0c;他需要用户手动保存fd_set这个位图结构&#xff0c;来表示读写事件的关注与否或者就绪性。 而且由于fd_set的大小是固定的&#xff0c;这就意味着他能管理的套接字文件描述符是…

C语言贪吃蛇实现

When the night gets dark,remember that the Sun is also a star. 当夜幕降临时&#xff0c;请记住太阳也是一颗星星。 ————《去月球海滩篇》 目录 文章目录 一、《贪吃蛇》游戏介绍 二、WIN32部分接口简单介绍 2.1 控制台窗口大小设置 2.2 命令行窗口的名称的变更 2…

基于深度学习的图片识别系统(下)

文章目录 前言1.任务描述2.模型搭建3.代码解释3.1模型加载3.2加载数据3.3模型权重的保存3.4学习率3.5过拟合3.6训练模型3.7调试检查 4.结果分析5. 完整代码结语 前言 书接上回&#xff0c;我们已经完成数据预处理部分的内容&#xff0c;后续仍需要对表格进行裁剪&#xff0c;此…

再学:区块链基础与合约初探 EVM与GAS机制

目录 1.区块链是什么 2.remix ​3.账户​ ​4.以太坊三种交易​ 5.EVM 6.以太坊客户端节点 ​7.Gas费用 8.区块链浏览器 1.区块链是什么 只需要检验根节点 Merkel根是否有更改&#xff0c;就不用检查每个交易是否有更改。方便很多。 2.remix 3.账户 如果交易失败的话&…

Java 中装饰者模式与策略模式在埋点系统中的应用

前言 在软件开发中&#xff0c;装饰者模式和策略模式是两种常用的设计模式&#xff0c;它们在特定的业务场景下能够发挥巨大的作用。本文将通过一个实际的埋点系统案例&#xff0c;探讨如何在 Java 中运用装饰者模式和策略模式&#xff0c;以及如何结合工厂方法模式来优化代码…

HCIP_NOTE03_网络组成

网络组成 LAN MAN WAN 园区网 企业或机构内部的网络,分大中小型 行业园:企业园网 校园网 政务园 商业园 三层交换机 数据大量交换的局域网内部,转发效率高,有简单的路由功能 路由器 进出口网络,适用于复杂的网络环境,选路需求 无线网 信号传输稳定性差---- 电磁波易受干…

简记_单片机硬件最小系统设计

以STM32为例&#xff1a; 一、电源 1.1、数字电源 IO电源&#xff1a;VDD、VSS&#xff1a;1.8~3.6V&#xff0c;常用3.3V&#xff0c;去耦电容1 x 10u N x 100n &#xff1b; 内核电源&#xff1a;内嵌的稳压器输出&#xff1a;1.2V&#xff0c;给内核、存储器、数字外设…

32.[前端开发-JavaScript基础]Day09-元素操作-window滚动-事件处理-事件委托

JavasScript事件处理 1 认识事件处理 认识事件(Event) 常见的事件列表 认识事件流 2 事件冒泡捕获 事件冒泡和事件捕获 事件捕获和冒泡的过程 3 事件对象event 事件对象 event常见的属性和方法 事件处理中的this 4 EventTarget使用 EventTarget类 5 事件委托模式 事件委托&am…

LeetCode hot 100 每日一题(15)——48.旋转图像

这是一道难度为中等的题目&#xff0c;让我们来看看题目描述&#xff1a; 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 提示…

图灵300题-21~40-笔记002

图灵300题 图灵面试题视频&#xff1a;https://www.bilibili.com/video/BV17z421B7rB?spm_id_from333.788.videopod.episodes&vd_sourcebe7914db0accdc2315623a7ad0709b85&p20。 本文是学习笔记&#xff0c;如果需要面试没有时间阅读原博文&#xff0c;可以快速浏览笔…

09_从经典论文入手Seq2Seq架构

Sequence to Sequence 架构 Paper链接 Sequence to Sequence Learning with Neural Networks B站课程ShusenWang 核心思想 关键的改进点 In this paper, we show that a straightforward application of the Long Short-Term Memory (LSTM) architecture [16] can solve …

大疆上云api介绍

概述 目前对于 DJI 无人机接入第三方云平台,主要是基于 MSDK 开发定制 App,然后自己定义私有上云通信协议连接到云平台中。这样对于核心业务是开发云平台,无人机只是其中一个接入硬件设备的开发者来说,重新基于 MSDK 开发 App 工作量大、成本高,同时还需要花很多精力在无人…

3、孪生网络/连体网络(Siamese Network)

目的&#xff1a; 用Siamese Network (孪生网络) 解决Few-shot learning (小样本学习)。 Siamese Network并不是Meta Learning最好的方法&#xff0c; 但是通过学习Siamese Network&#xff0c;非常有助于理解其他Meta Learning算法。 这里介绍了两种方法&#xff1a;Siame…

OpenCV图像拼接(7)根据权重图对源图像进行归一化处理函数normalizeUsingWeightMap()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::detail::normalizeUsingWeightMap 是 OpenCV 中用于图像拼接细节处理的一个函数。它根据权重图对源图像进行归一化处理&#xff0c;通常用于…