文章目录
1、TreeSet 简述
TreeSet是基于TreeMap作为存储的可排序、可去重的有序集合
继承于AbstractSet,AbstractSet实现了equals和hashcode方法
实现了NavigableSet接口,意味着它支持一系列的导航方法,比如查找与指定目标最匹配项
实现了Cloneable接口,意味着它能被复制
实现了java.io.Serializable接口,意味着它支持序列化
2、TreeSet源码分析
public class TreeSet<E> extends AbstractSet<E>
implements NavigableSet<E>, Cloneable, java.io.Serializable
{
/**
* 使用 NavigableMap 的 key 来存储 Set 集合的元素
*/
private transient NavigableMap<E,Object> m;
// 虚拟一个 PRESENT 作为 Map 集合的所有 value
private static final Object PRESENT = new Object();
/**
* 包级别访问权限的构造器,以指定的 NavigableMap 对象创建 Set 集合
*/
TreeSet(NavigableMap<E,Object> m) {
this.m = m;
}
/**
* 以自然排序方式创建一个新的 TreeMap,
* 使用该 TreeMap 的 key 来保存 Set 集合的元素
*/
public TreeSet() {
this(new TreeMap<E,Object>());
}
/**
* 根据自定义排序方式创建一个新的 TreeMap,
* 使用该 TreeMap 的 key 来保存 Set 集合的元素
*/
public TreeSet(Comparator<? super E> comparator) {
this(new TreeMap<>(comparator));
}
/**
* 根据无参构造器创建一个 TreeSet,底层以 TreeMap 保存集合元素
* 向 TreeSet 中添加 指定Collection 集合 c 里的所有元素