TreeMap 和 TreeSet 的基本情况、特性以及使用场景,并对比它们与 HashMap 和 HashSet

TreeMap

基本情况

  • 实现:基于红黑树实现的 NavigableMap
  • 排序:键按自然顺序或自定义顺序(通过 Comparator)排序。
  • 特性
    • 不允许 null 键,但允许 null 值。
    • 保证键有序。
    • 迭代时按排序顺序。
    • 复杂度:基本操作如 putgetremove 复杂度为 O(log n)。

使用场景

  • 需要按键有序的映射。
  • 需要快速查找范围查询(如获取某区间的键值对)。
  • 需要按排序顺序迭代键值对。

TreeSet

基本情况

  • 实现:基于 TreeMap 实现。
  • 排序:元素按自然顺序或自定义顺序(通过 Comparator)排序。
  • 特性
    • 不允许 null 元素。
    • 保证元素有序。
    • 迭代时按排序顺序。
    • 复杂度:基本操作如 addremovecontains 复杂度为 O(log n)。

使用场景

  • 需要保持元素有序的集合。
  • 需要快速查找范围查询(如获取某区间的元素)。
  • 需要按排序顺序迭代。

HashMap

基本情况

  • 实现:基于哈希表实现的 Map
  • 排序:无序。
  • 特性
    • 允许 null 键和 null 值。
    • 不保证顺序,元素顺序可能随时间变化。
    • 复杂度:基本操作如 putgetremove 复杂度为 O(1)。

使用场景

  • 需要快速查找、插入和删除的映射。
  • 不关心元素顺序。

HashSet

基本情况

  • 实现:基于 HashMap 实现。
  • 排序:无序。
  • 特性
    • 允许 null 元素。
    • 不保证顺序,元素顺序可能随时间变化。
    • 复杂度:基本操作如 addremovecontains 复杂度为 O(1)。

使用场景

  • 需要快速查找、插入和删除的集合。
  • 不关心元素顺序。

比较与对比

相同点

  • TreeSetTreeMap

    • 都基于红黑树实现,保证元素/键有序。
    • 复杂度相同:基本操作复杂度为 O(log n)。
  • HashSetHashMap

    • 都基于哈希表实现,不保证元素/键有序。
    • 复杂度相同:基本操作复杂度为 O(1)。

不同点

  • 有序 vs 无序

    • TreeSetTreeMap 保证元素/键有序。
    • HashSetHashMap 不保证元素/键有序。
  • 允许 null 的情况

    • TreeSet 不允许 null 元素。
    • TreeMap 不允许 null 键,但允许 null 值。
    • HashSet 允许 null 元素。
    • HashMap 允许 null 键和 null 值。
  • 使用场景

    • TreeSetTreeMap 适用于需要排序的场景,且支持范围查询
    • HashSetHashMap 适用于需要快速查找、插入和删除的场景,不关心元素顺序

总结

选择 TreeSetTreeMapHashSetHashMap 取决于具体需求:

  • 需要有序集合/映射,范围查询:选择 TreeSetTreeMap
  • 需要快速查找、插入和删除,无序要求:选择 HashSetHashMap

理解各自的特性和使用场景,能够更高效地解决问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/759248.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot漫画网站系统设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,…

目前常见的几款企业级im即时通讯软件有哪些?

在目前的市场上,有几款常见的企业级即时通讯软件广受企业青睐。以下是其中几款主流企业级即时通讯软件的介绍和特点。 1. 微软Teams 微软Teams是一款集即时通讯、协作和视频会议功能于一体的企业级通讯软件。它提供了实时聊天、语音通话、视频会议、文件共享和团队…

零刻SER8 8845HS设置RAID磁盘阵列教程

SER8内置两个NVme硬盘位,支持硬盘RAID功能,目前支持以下几种RAID模式。 Volume(卷):将多块硬盘拼接成一个大硬盘,也称为JBOD(Just a Bunch Of Disks)。它不要求硬盘容量相同&#xf…

软件构造 | 期末查缺补漏

软件构造 | 期末查缺补漏 总体观 软件构造的三维度八度图是由软件工程师Steve McConnell提出的概念,用于描述软件构建过程中的三个关键维度和八个要素。这些维度和要素可以帮助软件开发团队全面考虑软件构建的方方面面,从而提高软件质量和开发效率。 下…

What does the error ‘module ‘langchain‘ has no attribute ‘verbose‘ refer to?

题意:错误 module langchain has no attribute verbose 指的是什么意思? 问题背景: Kind of new to Langchain/Qdrant but Im building a recommendation engine to recommend users based on the contents of their associated PDF files, …

学习阳明心学,需要下真功夫,持续用功

阳明心学是功夫之学,看到善的就发扬光大,看到恶的就立即改正,这才是真功夫

LeetCode 算法:二叉搜索树中第K小的元素 c++

原题链接🔗:二叉搜索树中第K小的元素 难度:中等⭐️⭐️ 题目 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 小的元素(从1开始计数)。 示例 1:…

【web】2、集成插件

1、element-plus 官网地址:设计 | Element Plus 安装 plus 及 icon 图标库 1.1 官网提供plus安装方法: 1.2 官网提供 icon 安装方法 1.3 安装 pnpm install element-plus element-plus/icons-vue main.ts全局安装element-plus,element-plus默认支持语言英语设…

Navicat 外网连接 mysql (1、通过SSH方式内网访问 2、对外开放3306端口)

1、通过SSH方式内网访问 直接常规方式使用IP、账号密码连接,失败 SSH方式: 常规 选项卡中:localhost录入数据库账号密码 SSH 选项卡中:勾选使用SSH,输入服务器IP、账号、密码 如果出现该错误,可能是服务器…

51个图表,完美展示数据分布关系!

本节介绍seaborn展示数据分布关系的图表(Distribution plots)的实现,该类图表用于展示数据集的分布规律,帮助快速获取数据多方面信息,例如,观测值的范围、中心趋势、是否存在某个方向上严重偏斜、是否存在双…

10大内网安全管理系统!企业内网安全必备系统

内网安全管理系统对于维护企业网络安全至关重要,它们帮助监控、管理内部网络资源,防止数据泄露和安全威胁。以下是十款知名的内网安全管理系统。 1. 安企神终端安全管理系统 详细介绍: 安企神是针对企业内网安全需求设计的一款综合管理系统&…

在大数据盛行的今天,为什么需要使用图数据库?

分类 性能 可扩展性 灵活性 复杂性 键值存储数据库 高 高 高 无 文档数据库 高 可变 高 低 列存储数据库 高 可变 一般 低 图数据库 可变 高 高 高 关系型数据库 可变 可变 低 一般 表1:5类主流数据库产品分析 对于深度数据的分析和…

数值分析笔记(四)数值微积分

牛顿-科茨公式 ∫ a b f ( x ) d x ≈ ( b − a ) ∑ k 0 n C k ( n ) f ( a k h ) \int_a^bf(x) \mathrm{d}x\approx(b-a)\sum_{k0}^nC_k^{(n)}f(akh) ∫ab​f(x)dx≈(b−a)k0∑n​Ck(n)​f(akh) 其中, C k ( n ) C_k^{(n)} Ck(n)​为科茨系数。 n1时&#xff…

Drag Select Compose:实现多平台图片多选功能的利器

Drag Select Compose:实现多平台图片多选功能的利器 在现代移动应用开发中,图片多选功能是一个常见且实用的需求。而实现这种功能可能涉及到复杂的手势处理和状态管理。今天,我将介绍一款强大的Compose多平台库——Drag Select Compose,它能够轻松实现类似于Google Photos…

Qt开发 | 无边框窗口 | 自定义标题栏 | 拖拽拉伸 | 窗口阴影 | 圆角窗口

文章目录 一、QWidget类介绍二、无边框窗口的基本实现三、自定义标题栏并实现拖拽拉伸四、设计一个无边框窗口公共类五、标题栏qss美化、关闭、最小化、最大化六、实现窗口阴影七、圆角窗口八、一个自定义标题栏带圆角阴影的窗口 一、QWidget类介绍 QWidget 是 Qt 框架中的一个…

SpringBoot整合MongoDB JPA使用

一、整合MongoDB SpringDataMongoDB是 SpringData家族成员之一,MongoDB的持久层框架,底层封装了 mongodb-driver。mongodb-driver 是 MongoDB官方推出的 Java连接 MongoDB的驱动包,相当于JDBC驱动。 SpringBoot整合 MongoDB,引入…

【MySQL】数据库——备份与恢复,日志管理1

一、数据备份的重要性 1.备份的主要目的是灾难恢复 在生产环境中,数据的安全性至关重要 任何数据的丢失都可能产生严重的后果造成数据丢失的原因: 程序错误人为,操作错误运算错误磁盘故障灾难(如火灾、地震)和盗窃 2.数据库备份…

pcap包常见拆分方法

文章目录 Wireshark 拆分流量包SplitCap使用简介魔数报错示例结果 在进行流量分析时,经常需要分析pcap流量包。但是体积过大的流量包不容易直接分析,经常需要按照一定的规则把它拆分成小的数据包。 这里统一选择cic数据集里的Thursday-WorkingHours.pcap…

【Oracle篇】逻辑备份工具expdp(exp)/impdp(imp)和物理备份工具rman的区别和各自的使用场景总汇(第八篇,总共八篇)

💫《博主介绍》:✨又是一天没白过,我是奈斯,DBA一名✨ 💫《擅长领域》:✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux,也在扩展大数据方向的知识面✌️…

基于局域网下的服务器连接、文件传输以及内网穿透教程 | 服务器连接ssh | 服务器文件传输scp | 内网穿透frp | 研究生入学必备 | 深度学习必备

🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 📌本篇博客分享的是基于局域网下的服务器连接🔗、文件传输以及内网穿透教程,内容非常完备✨,涵盖了在服务器上做深度学…