1.简介
- TreeSet 是一个有序集合,它的作用是提供有序的Set集合。即可以排序
- 同样不允许重复
- 没有索引
- TreeSet 是通过 TreeMap 实现的,底层维护的是红黑树结构。
- 当TreeSet的泛型对象不是java的基本类型的包装类时,对象需要重写 Comparable#compareTo()方法
2.构造器
注:
- 当我们使用无参构器时,创建的TreeSet仍是无序的
- 我们可以传入一个自己编写的比较器(匿名内部类)去指定排序规则
//默认构造方法。使用改
TreeSet()
// 创建的 TreeSet 包含 collection
TreeSet(Collection<? extends E> collection)
// 指定 TreeSet 的比较器
TreeSet(Comparator<? super E> comparator)
// 创建的 TreeSet 包含set
TreeSet(SortedSet<E> set)
3.添加机制(指定构造器)
1.构造器把传入的比较器对象,赋给了TreeSet的底层的TreeMap的属性this.comparator
public TreeMap(Comparator<? super K> comparator) {
this.comparator = comparator;
}
2.在调用添加语句时,底层会执行到这个语句,以进行排序
Comparator<? super K> cpr = comparator;
if (cpr != null) {
do {
parent = t;
cmp = cpr.compare(key, t.key);
if (cmp < 0)
t = t.left;
else if (cmp > 0)
t = t.right;
else
return t.setValue(value);
} while (t != null);
}