TreeSet() 是使用二叉树的原理对新 add() 的对象按照指定的顺序排序(升序、降序),每增加一个对象都会进行排序,将对象插入的二叉树指定的位置; ~ 本篇内容包括:TreeSet 概述、TreeSet 的使用以及其他知识点
TreeSet() 是使用二叉树的原理对新 add() 的对象按照指定的顺序排序(升序、降序),每增加一个对象都会进行排序,将对象插入的二叉树指定的位置;
Integer 和 String 对象都可以进行默认的 TreeSet 排序,而自定义类的对象是不可以的,自己定义的类必须实现 Comparable 接口,并且覆写相应的 compareTo()
函数,才可以正常使用;在覆写 compare()
函数时,要返回相应的值才能使 TreeSet 按照一定的规则来排序
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数
TreeSet 的作用是保存无重复的数据,不过还对这些数据进行了排序。TreeMap 的底层是通过红黑树实现的,所以 TreeSet 底层也是通过红黑树实现的。TreeSet 最主要的特点就是对元素进行了排序。其特点如下:
spliterator()
方法方法名 | 方法说明 | 方法名 | 方法说明 |
---|---|---|---|
public TreeSet() | 无参构造方法,完成 map 的创建; | public TreeSet(Comparator<? super E> comparator) | 构造TreeSet,根据指定的比较器进行排序 |
public TreeSet(Collection<? extends E> c) | 构造一个包含指定集合中的元素的TreeSet,根据其元素的自然排序进行比较 | public TreeSet(SortedSet<E> s) | 构造TreeSet,并使用与指定排序集相同的顺序 |
方法名 | 方法说明 | 方法名 | 方法说明 |
---|---|---|---|
boolean add(E e) | 添加一个元素,如果该元素已经存在,则返回true,如果不存在,则返回false | boolean addAll(Collection<? extends E> c) | 添加一个包含指定元素的集合 |
boolean remove(Object o) | hashSet的迭代器 | void clear() | 获得大小 |
NavigableSet<E> headSet(E toElement, boolean inclusive) | 返回子 Set | NavigableSet<E> tailSet(E fromElement, boolean inclusive) | 返回Set的尾部,范围是:从fromElement到结尾。 |
E first() | 返回Set的第一个元素 | E last() | 返回Set的最后一个元素 |
E lower(E e) | 返回Set中小于e的最大元素 | E floor(E e) | 返回Set中小于/等于e的最大元素 |
E ceiling(E e) | 返回Set中大于/等于e的最小元素 | E higher(E e) | 返回Set中大于e的最小元素 |
E pollFirst() | 获取第一个元素,并将该元素从TreeMap中删除 | E pollLast() | 获取最后一个元素,并将该元素从TreeMap中删除 |
void writeObject(java.io.ObjectOutputStream s) | 将TreeSet的“比较器、容量,所有的元素值”都写入到输出流中 | void readObject(java.io.ObjectInputStreams) | 从输入流中读取TreeSet的“比较器、容量,所有的元素值” |
TreeMap 和 TreeSet 是 Java Collection Framework 的两个重要成员,其中 TreeMap 是 Map 接口的常用实现类,而 TreeSet 是 Set 接口的常用实现类。虽然 TreeMap 和TreeSet 实现的接口规范不同,但 TreeSet 底层是通过 TreeMap 来实现的(如同HashSet底层是是通过HashMap来实现的一样),因此二者的实现方式完全一样。而 TreeMap 的实现就是红黑树算法
不同点: