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

[Java数据结构和算法] 详解 TreeMap 和 TreeSet

 

认识 TreeMap 和 TreeSet

TreeMap 和 TreeSet 是Java 中利用红黑树实现的 Map 和 Set。

其实质是一棵近似平衡的二叉搜索树,即在二叉搜索树的基础之上加了颜色以及一些性质。

 

TreeMap

TreeMap 是以红黑树为底层结构、基于比较的 Map。

若调用构造方法时不指定比较器,系统默认以Key来进行比较;若传入比较器则会根据传入的比较器来进行比较。

需要注意的是,TreeMap 的排序,无论是否提供了自定义比较器,都必须与 equals 方法保持一致。

构造方法

1. 无参构造方法

调用该无参构造方法会创建一个空的 TreeMap ,并且默认以 Key 进行比较。

因此,所有传入 TreeMap 的 Key 必须是可比较的(即实现了 Comparable 或 Comparator接口),否则将会报 ClassCastException 异常。

 

2. 传入自定义比较器的构造方法

调用该构造方法,必须重写比较方法,系统会根据所传入的比较器来进行比较。

如果传入的比较器为空,则会默认根据 Key 来进行比较(相当于第一种构造方法)。

当然了,所有传入的 Key 也必须是可比较的。

 

3. 传入 Map 的构造方法

调用此构造方法将会新建一个 TreeMap,并且将传入的 Map 中的元素全部放入新建的 TreeMap 当中。

所有传入的 Key 必须实现 Comparable接口。

 

4. 传入一个带比较器的 Map 的构造方法

将传入的 Map 中的元素全部放入新建的 TreeMap 中,并且使用 Map 中的比较器进行比较。

 

TreeSet

TreeSet 只存储 Key,是一种纯Key 模型。它的底层其实是 TreeMap,结构也是二叉搜索树。

构造方法

1. 无参构造方法

由于 TreeSet 的底层是 TreeMap(前面文章已讲过),因此,TreeSet 的底层结构也是二叉搜索树,也就意味着放入 TreeSet 中的元素必须是可比较的(即实现了 Comparable接口的)。

 

2. 传入一个自定义比较器的构造方法

如果调用此构造方法,必须重写比较方法。

根据传入的比较器,来进行元素间的比较。

如果传入的比较器为空,则会根据默认方式来进行比较(相当于第一种构造方法)。

 

3. 传入一个集合的构造方法

会创建一个含有传入集合的所有元素的新集合。

若传入的集合为空,则会报 NullPointerException 错误。

 

4. 传入一个带比较器的集合的构造方法

将会创建一个含有传入的集合所有元素的新集合,并且以传入集合的比较器来进行元素间的比较。


 

http://www.dtcms.com/a/515406.html

相关文章:

  • 光影筑梦 温暖同行 第三届粤港澳大湾区公益网络微电影大赛展映及颁奖礼圆满落幕
  • 直流滤波器 保障直流系统稳定运行的关键
  • 怎么把自己做的网站发布怎么查看什么公司做的网站
  • 数学建模竞赛模板合集(含latex与word模板):国赛、美赛、研赛、其他
  • 本科/硕士毕业论文格式修改大全|word格式修改
  • MySQL5.7一键升级到MySQL8.0
  • 广州网站建设天维知名外贸网站建设公司
  • 论文阅读:ICML 2025 Adversarial Reasoning at Jailbreaking Time
  • STM32USB学习
  • coze使用记录
  • java面试-0220-HashSet、LinkedHashSet、TreeSet实现?和ArrayList区别?
  • 2、WordPress使用--安装gutenverse插件
  • 南和县建设局黄页网站设计之窗
  • NetworkX 最短路径算法选型图
  • 互联网公司软件开发全流程规范文档
  • springboot基于JAVA的二手书籍交易系统的设计与实现(代码+数据库+LW)
  • STM32产品程序测试完整指南
  • AWS Data Exchange:概述、功能与安全性
  • 掌控制造脉络:电子元器件行业常用ERP系统概览与参考指南
  • 个人网站静态网页模板海淀区网站建设
  • 低代码开发的约束性及ABP框架的实践解析
  • centos7部署jenkins
  • 软文街官方网站如何提升做网站的效率
  • 【论文精读】GenTron:基于 Transformer 的扩散模型革新图像与视频生成
  • 【RabbitMQ】简介
  • (done) 自学 MPI (4) Environment Management Routines
  • webrtc弱网-RembThrottler类源码分析及算法原理
  • 鸿蒙的声明式 UI转换为 JSView
  • 【MySQL】从零开始了解数据库开发 --- 如何理解事务隔离性
  • BugKu Web渗透之 never_give_up