目录
4.1 Integer和String对象都可以进行默认的TreeSet排序
1.背景介绍
- TreeSet底层数据结构采用红黑树(平衡二叉树)来实现,元素唯一且已经排好序;唯一性同样需要重写hashCode和equals()方法,二叉树结构保证了元素的有序性。根据构造方法不同,分为自然排序(无参构造)和比较器排序(有参构造)。
-
public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, Serializable
- 基于
TreeMap
的NavigableSet
实现。使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的Comparator
进行排序,具体取决于使用的构造方法。 -
此实现为基本操作(
add
、remove
和contains
)提供受保证的 log(n) 时间开销。
2.TreeSet保证元素唯一和排序的原理
TreeSet集合底层数据结构是红黑树(平衡二叉树)。 第一个元素存储的时候,直接作为根节点。 从第二个开始,每个元素从根节点开始比较:
大——就作为右孩子 (保证有序)
小——就作为左孩子 (保证有序)
相等——不做处理(保证唯一性)
3.两种排序(自然排序,比较器排序)
- 自然排序:让元素所属的类中实现自然排序接口Comparerable接口 。可以在自定义类中实现Comparerable接口,重写compareTo()方法。
- 比较器排序:让集合的构造方法接收一个比较器Comparator接口的子类对象。可以在自定义类中实现Comparetor接口,重写compare()方法。
4.自然排序的实现
4.1 Integer和String对象都可以进行默认的TreeSet排序
public class TEST {
public static void main(String[] args) {
//Integer类本身已经实现了Co