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

说说HashMap 的位操作以及HashSet的contains方法复杂度是多少?

HashMap 的位操作

HashMap 是一种基于哈希表的集合实现,其内部使用一个数组来存储键值对。在 Java 中,位操作在 HashMap 的实现中扮演着重要的角色。以下是 HashMap 中涉及到的主要位操作:

  1. Hash Code 计算

    • HashMap 使用对象的 hashCode() 方法来计算对象的哈希值。为了提高哈希冲突的处理效率,会对哈希值进行一系列位运算处理。
    • HashMap 中会使用高位和低位的处理来混合哈希值,例如使用异或(^)操作。具体实现如下:
      int hash = key.hashCode();
      hash ^= (hash >>> 20) ^ (hash >>> 12);
      hash ^= (hash << 7) ^ (hash << 4);
      hash ^= (hash >>> 24);
      return hash & (n - 1); // n 是当前的数组长度
      
  2. 数组索引计算

    • 在存储元素时,HashMap 需要根据计算出的哈希值来找到存储的数组索引,这使用了以下操作:
      int index = hash % capacity; // capacity 是当前数组的容量
      
    • 为了保持数组索引在合法范围内,通常会进行位运算,以确保性能更高且避免不必要的整除操作。HashMap 采用 index = hash & (n - 1),这样可以利用 n 是 2 的幂次方的特性,使得求余操作更高效。
  3. 容量扩展

    • HashMap 的元素数量超过阈值(负载因子与当前容量的乘积)时,会进行数组扩展和元素重新哈希(rehashing)。在这个过程中,原有的哈希值和计算的索引都会使用上述位运算来重新映射到新的数组。

HashSet 的 contains 方法复杂度

HashSet 是基于 HashMap 实现的,它将每个元素作为 HashMap 的键,而值为一个常量。调用 HashSetcontains 方法时,实际上是通过 HashMapcontainsKey 方法来实现的。

  • 时间复杂度
    • 平均情况下,HashMapcontainsKey() 方法具有 O(1) 的时间复杂度,因为它只需计算哈希值并查找索引。
    • 在最坏情况下(例如:所有元素的哈希值冲突导致进入同一个链表),时间复杂度为 O(n),其中 n 是当前 HashSet 中的元素数量。

总的来说

  • 在大多数情况下,HashSetcontains() 方法的时间复杂度是 O(1),但在最坏情况下可能会退化为 O(n)。使用良好的哈希函数和适当的容量,可以显著降低发生哈希冲突的可能性,从而保证快速的查询性能。
    在这里插入图片描述

图标更换
https://pan.quark.cn/s/d366949260e9
idea free版
https://pan.quark.cn/s/dd7db30d835f
free 🎬大全
https://kdocs.cn/l/cqhxNU9I2lLD

在这里插入图片描述


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

相关文章:

  • MySQL 很重要的库 - 信息字典
  • 基于微信小程序的安心陪诊管理系统
  • InVideo AI技术浅析(五):生成对抗网络
  • RabbitMQ---事务及消息分发
  • Apache Hive--排序函数解析
  • 深入探索 Vue.js 组件开发中的最新技术:Teleport 和 Suspense 的使用
  • std::forward实现原理与应用场景
  • Linux之socket编程(上)
  • Excel 技巧14 - 如何批量删除表格中的空行(★)
  • 工业现场数据实时采集:解锁工业智能化转型的关键
  • 深入理解Linux系统内存中文件结构以及缓冲区,模拟实现c语言库文件接口
  • 《重生到现代之从零开始的C++生活》—— 类和对象2
  • 【STM32-学习笔记-14-】FLASH闪存
  • 开源模型应用落地-工具使用篇-Spring AI-高阶用法(九)
  • 力扣203题—— 移除链表元素
  • ovs实现lb负载均衡
  • 外部flash烧写算法学习笔记(一)
  • Linux:EXT2文件系统
  • 分布式 IO 模块:开启药品罐装产线高效生产新纪元
  • 技术面试中的软素质技巧性答复集锦
  • 【HarmonyOS NEXT】鸿蒙三方应用跳转到系统浏览器
  • 将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(3.纯python的实惠版)
  • 第01章 分别使用DCMTK和gdcm库,解析DICOM文件系列的dicom标准数据信息
  • win32汇编环境,窗口程序中复杂列表框的应用举例
  • 家政预约小程序08服务分类
  • 【go语言】go的卸载与安装