TreeSet:能够对元素按照某种规则进行排序。
1、自然排序(元素具备比较性)。根据元素的自然顺序对元素进行排序 。自然排序需要实现comparable接口中的compareTo()方法,在compareTo方法中定义规则
2、构造器排序(集合具备比较性)。根据TreeSet的构造方法接收一个比较器接口的子类对象Comparator。
具体情况取决于使用的构造方法。无参就是自然排序,否则就是比较器排序
如果一个方法的参数是接口,那么真正要的是这个接口的实现类的对象,而匿名内部类就可以实现。
public TreeSet():构造一个新的空 set,该 set 根据其元素的自然顺序进行排序
public TreeSet(Comparator<? super E> comparator):构造一个新的空 TreeSet,它根据指定比较器进行排序。
自然排序
1、TreeSet是如何保证元素的排序和唯一性的呢?当存储的是Integer类型的元素的情况下举例说明:
通过查看TreeSet的add方法,我们发现它的底层是通过一个Map集合的put方法实现的,因此我们只要去找这个put方法的源码就知道了,我们发现这个Map是NavigableMap类型的,但是NavigableMap居然是个接口,那怎么办呢?于是我们就要想到去找这个NavigableMap接口的实现类看这个实现类的put方法即可。
于是我们去看TreeSet的API:果然TreeMap实现了NavigableSet 接口。
public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, Serializable
:基于 TreeMap 的 NavigableSet 实现。
于是我们又去看TreeMap的API:
public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, Serializable
:基于红黑树(Red-Black tree)的 NavigableMap 实现。
因此具体类是TreeMap类,因此我们要看add方法的源码就需要去找TreeMap的put方法的源码即可。
private final Comparator<? super K> comparator; //成员变量
//TreeS