大纲
- treeset原理分析
- treeset源码分析
1. treeset原理分析
treeset中的数据是唯一的,并且是有序的,它底层使用了treemap进行存储,treemap底层使用了红黑树进行存储,所以treeset也是使用红黑树的模式进行存储。
2. treeset源码分析
public class TreeSet<E> extends AbstractSet<E>
implements NavigableSet<E>, Cloneable, java.io.Serializable
- 实现了NavigableSet,支持排序
- 实现了Cloneable,接口支持拷贝
-实现了serializeble,接口支持序列化
private transient NavigableMap<E,Object> m;
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();
NavigableMap接口,Treemap实现了当前接口,
PRESENT为当前对象,可忽略
TreeSet(NavigableMap<E,Object> m) {
this.m = m;
}
public TreeSet() {
this(new TreeMap<E,Object>());
}
public TreeSet(Comparator<? super E> comparator) {
this(new TreeMap<>(comparator));
}
- 第一个构造方法为传入一个实现了NavigableMap接口的一个map->TreeMap
-第二个接口可以传入一个比较器,再创建一个treemap把比较器传入,构建一个treemap对象。
3. 其余的add(),remove()方法都是调用的m,也就是treemap的方法进行实现。
public boolean add(E e) {
return m.put(e, PRESENT)==null;
}
public boolean remove(Object o) {
return m.remove(o)==PRESENT;
}
需要了解treemap可以看我的文章java8中treemap源码分析 - 简书 (jianshu.com)
喜欢的话点个👍
网友评论