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

contains方法的实现对比

contains方法定义在Collection接口中,所有实现了该接口的集合类都支持contains方法

在Java中,不同的数据结构实现contains方法的方式各异,这直接影响了它们的时间和空间效率。下面我们将详细探讨几种主要的数据结构(如ArrayList, LinkedList, HashSet, TreeSet等)的底层原理及其在执行contains操作时的表现。

List接口的实现类

ArrayList:

ArrayList底层基于动态数组实现,支持随机访问,但是中间插入和删除效率较低(因为需要元素的挨个复制移动)

contains方法通过遍历整个列表来查找元素,时间复杂度为O(n)

LinkedList:

LinkedList底层是一个双向列表,不支持随机访问,在插入和删除比较高效

contains方法的查找机制同样采用遍历的方式查找元素,时间复杂度也为O(n)

Set接口的实现类

set一般在有集合内元素不能重复的这种前提要求下使用

HashSet:

HashSet实际上是基于HashMap实现的,使用哈希函数计算元素的哈希码,并将元素存储在对应的桶中

contains方法的查找机制:通过计算哈希值快速定位到元素所在的桶,然后比较元素是否相等,理想情况下时间复杂度是O(1),最坏的情况下会退化至O(n)

TreeSet:

TreeSet使用红黑树来存储元素,可以保证所有操作的时间复杂度都保持在O(log n)的水平,同时还能维持元素的排序顺序

contains方法的查找机制:利用树的结构特性,在对数时间内完成查找,即O(log n)

Map接口

虽然Map接口没有实现Collection接口,但是它提供了containsKey和containsValue方法来检查是否存在某个键或值

HashMap:

containsKey:计算给定key的哈希码,根据哈希码找到指定的桶,然后在桶内搜索指定的key

containsValue:遍历整个HashMap中所有值,逐一比较是否相等

总结一下,对于这种集合中检索是否有某个元素,

从空间复杂度来说,最低的就是ArrayList,因为所有的空间全都用来存储数据没有额外的内存消耗,对于其余的例如LinkedList需要一定的空间存储前后指针,map需要再额外存储key等,都有额外的内存消耗

时间复杂度来说,最低的就是HashMap在理想情况下可以在O(1)的时间复杂度下找到,虽然最差情况也可能达到O(n),对于list只能遍历,使用红黑树作为底层数据结构的话可以在O(log n)的复杂度内实现

所以根据实际生产的具体需要来选择适当的集合并做一定的调整,例如可以使用map替换list可以通过空间换时间来提高效率

相关文章:

  • leetcode二叉树相关题目复习(C语言版)
  • PDF Base64格式字符串转换为PDF文件临时文件
  • 具身智能梳理以及展望
  • 读入csv文件写入MySQL
  • 《AI大模型应知应会100篇》第64篇:构建你的第一个大模型 Chatbot
  • 鸿蒙OSUniApp 开发实时聊天页面的最佳实践与实现#三方框架 #Uniapp
  • FFmpeg 与 C++ 构建音视频处理全链路实战(五)—— 音视频编码与封装
  • 【MySQL 基础篇】深入解析MySQL逻辑架构与查询执行流程
  • 苹果处理器“仿生“命名背后的营销策略与技术创新
  • 最短路和拓扑排序知识点
  • 零基础学Java——第十一章:实战项目 - 桌面应用开发(JavaFX入门)
  • How Sam‘s Club nudge customers into buying more
  • 【IPMV】图像处理与机器视觉:Lec11 Keypoint Features and Corners
  • 开源 Web Shell 工具
  • C语言学习之文件操作
  • zookeeper本地部署
  • 12-串口外设
  • Flutter到HarmonyOS Next 的跨越:memory_info库的鸿蒙适配之旅
  • 本地测试远程DM达梦数据库连接(使用DBeaver)
  • 砷化镓太阳能电池:开启多元领域能源新篇
  • 体坛联播|博洛尼亚时隔51年再夺意杯,皇马逆转马洛卡
  • 山东省市监局“你点我检”专项抽检:一批次“无抗”鸡蛋农兽药残留超标
  • 男子退机票被收票价90%的手续费,律师:虽然合规,但显失公平
  • 江西省司法厅厅长张强已任江西省委政法委分管日常工作副书记
  • 普京提议恢复直接谈判,泽连斯基:望俄明日停火,乌愿谈判
  • 中国工程院院士、国医大师石学敏逝世