TreeSet(基于JDK1.8)
TreeSet
- Set的实现类之一
- 底层实现基于TreeMap
依赖关系
1
2 public class TreeSet<E> extends AbstractSet<E>
implements NavigableSet<E>, Cloneable, java.io.Serializable说明
- NavigableSet 接口 点击进去 发现是继承了 SortedSet 最终继承了 Set接口 意味着TreeSet 是有序的set集合
类注解
- 基于 TreeMap 的 NavigableSet 实现 具体使用取决于构造器的选择
- TreeSet 是线程不安全的 可以外部加锁 或者 使用 Collections#synchronizedSortedSet 例子:SortedSet s = Collections.synchronizedSortedSet(new TreeSet(…));
- since:1.2
属性
1
2
3
4
5
6
7
8
9 /**
* The backing map.
*/
private transient NavigableMap<E,Object> m;
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();
// 结构类似于HashSet构造方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 // 缺省
TreeSet(NavigableMap<E,Object> m) {
this.m = m;
}
// 无参 底层直接是new的TreeMap
public TreeSet() {
this(new TreeMap<E,Object>());
}
// 根据指定的比较器排序
// comparator 为自定义实现的 排序规则
public TreeSet(Comparator<? super E> comparator) {
this(new TreeMap<>(comparator));
}
// 传参Collection
public TreeSet(Collection<? extends E> c) {
this();
addAll(c);
}
// 将已排序的set 变成新的排序set
public TreeSet(SortedSet<E> s) {
this(s.comparator());
addAll(s);
}TreeSet 的 组合TreeMap方式
- TreeSet 复用 TreeMap 的 方式 是直接 让 TreeMap 去实现 TreeSet 中特殊的方法(TreeMap 中的静态内部类 KeySet 继承了AbstractSet 实现了NavigableSet)