1. 简介
TreeSet
底层是采用TreeMap
(更准确得说法是NavigableMap
)实现的一种Set
,所以它是有序的只不过其是单列元素。
2. 继承体系
TreeSet
实现了NavigableSet
接口,所以它是有序的。
3. 深入源码
3.1 属性
// 存储元素的map
private transient NavigableMap<E,Object> m;
// map中所有value为该成员变量
private static final Object PRESENT = new Object();
3.2 构造方法
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));
}
public TreeSet(Collection<? extends E> c) {
this();
addAll(c);
}
public TreeSet(SortedSet<E> s) {
this(s.comparator());
addAll(s);
}
3.3 添加、删除元素
public boolean add(E e) {
return m.put(e, PRESENT)==null;
}
public boolean remove(Object o) {
return m.remove(o)==PRESENT;
}
4. 总结
(1)TreeSet
底层使用NavigableMap
存储元素;
(2)TreeSet
是有序的;
(3)TreeSet
是非线程安全的;
(4)TreeSet
实现了NavigableSet
接口,而NavigableSet
继承自SortedSet
接口;
(5)TreeSet实现了SortedSet接口;