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接口;
本文详细介绍了TreeSet的数据结构,它是一种基于NavigableMap实现的有序集合。TreeSet保证了元素的唯一性和排序特性,通过源码分析展示了其内部机制,包括属性、构造方法及元素的添加和删除过程。
4万+

被折叠的 条评论
为什么被折叠?



