TreeSet和TreeMap排序

本文介绍了Java中Set接口的实现类HashSet与TreeSet的区别,以及如何通过实现Comparable接口或提供Comparator来完成元素的排序。此外,还讲解了TreeMap的使用方法。
部署运行你感兴趣的模型镜像

Set接口:HashSet  HashMap元素必须重写equals和hashcode方法

去重:比较==0即重复

TreeMap:要求key可以排序或提供key比较器

public TreeMap(Comparator<? super K> comparator)

TreeSet:确保元素实体可以排序或提供比较器  

public TreeSet(Comparator<? super E> comparator)


在添加元素的时候进行排序,所以使用时不要修改数据,数据使用final修饰,并初始化值

1)如果元素可以排序 ,需要实现java.lang.Comparable接口+重写comparTo方法

使用时选择空构造器 例如:new TreeSet()

2)如果元素不可以排序需要额外的排序业务类  ,实现java.util.Comparator接口+重写compare方法

使用时选择构造器 例如:TreeSet(Comparator<? super E> comparator)




您可能感兴趣的与本文相关的镜像

LobeChat

LobeChat

AI应用

LobeChat 是一个开源、高性能的聊天机器人框架。支持语音合成、多模态和可扩展插件系统。支持一键式免费部署私人ChatGPT/LLM 网络应用程序。

### Java 中 TreeSet TreeMap 的数据结构及使用方法 #### TreeSet 数据结构 TreeSet 是基于 NavigableSet 接口实现的一个有序集合类,其内部通过 TreeMap 来存储元素。因此,TreeSet 底层实际上依赖于红黑树来维护元素之间的顺序[^1]。 #### 创建初始化 TreeSet ```java // 导入必要的包 import java.util.TreeSet; public class Main { public static void main(String[] args) { // 初始化一个空的 TreeSet 对象,默认自然排序 TreeSet<Integer> treeSet = new TreeSet<>(); // 添加一些整数到 TreeSet 集合中 treeSet.add(5); treeSet.add(3); treeSet.add(7); System.out.println(treeSet); // 输出: [3, 5, 7] } } ``` #### TreeMap 数据结构 TreeMap 实现了 SortedMap 接口,并且同样采用红黑树作为底层数据结构。这使得它能够高效地执行增删查改操作的同时保持键值对按指定顺序排列[^2]。 #### 创建初始化 TreeMap ```java // 导入必要的包 import java.util.TreeMap; public class Main { public static void main(String[] args) { // 构造一个新的、按照默认比较器升序排列 key-value 键值对映射表 TreeMap<String, Integer> map = new TreeMap<>(); // 插入若干条记录 map.put("apple", 10); map.put("banana", 20); map.put("orange", 30); // 打印整个映射表的内容 System.out.println(map); // 输出: {apple=10, banana=20, orange=30} } } ``` #### TreeSet TreeMap 的区别 尽管两者都利用了相同的红黑树机制来进行高效的查找与遍历,但是它们之间存在显著差异: - **功能定位不同**:TreeSet 主要用于保存不重复的对象序列;而 TreeMap 则是用来关联唯一性的键与其对应的值。 - **继承层次有别**:前者实现了 Set 接口并扩展自 AbstractSet 类;后者则是 Map 接口中的一员,具体来说是从 AbstractMap 抽象基类派生而来[^3]。 - **性能特点各异**:由于 TreeMap 存储的是键值对,在访问特定项时可能需要额外的时间开销去检索相应的 value 值;相比之下,当只需要关心成员本身而不涉及任何附加信息的情况下,TreeSet 可能会更加快捷方便。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值