TreeSet
底层是基于TreeMap
实现的,它是线程不安全的,在多线程环境下进行修改会抛异常。TreeSet
是有序的,所以它的元素都必须是可比较的。
成员变量
private transient NavigableMap<E,Object> m;
// 虚假的值,所有元素的value都是它
private static final Object PRESENT = new Object();
构造方法
// 不带参数的构造函数。创建一个空的TreeMap
//以自然排序方法创建一个新的TreeMap,再根据该TreeMap创建一个TreeSet
//使用该TreeMap的key来保存Set集合的元素
public TreeSet() {
this(new TreeMap<E,Object>());
}
TreeSet(NavigableMap<E,Object> m) {
this.m = m;
}
//以定制排序的方式创建一个新的TreeMap。根据该TreeMap创建一个TreeSet
//使用该TreeMap的key来保存set集合的元素
public TreeSet(Comparator<? super E> comparator) {
this(new TreeMap<E,Object>(comparator));
}
// 创建TreeSet,并将集合c中的全部元素都添加到TreeSet中
public TreeSet(Collection<? extends E> c) {
this();
// 将集合c中的元素全部添加到TreeSet中
addAll(c);
}
// 创建TreeSet,并将s中的全部元素都添加到TreeSet中
public TreeSet(SortedSet<E> s) {
this(s.comparator());
addAll(s);
}
迭代
因为TreeSet是有序的,所以TreeSet可以进行正向迭代和反向迭代。
TreeSet<Integer> set = new TreeSet<>();
set.add(4);
set.add(5);
set.add(3);
set.add(1);
set.add(2);
Iterator<Integer> it1 = set.iterator();
while (it1.hasNext()){
Integer next = it1.next();
System.out.println(next);
}
System.out.println("============");
Iterator<Integer> it2 = set.descendingIterator();
while (it2.hasNext()){
Integer next = it2.next();
System.out.println(next);
}
版权属于:带翅膀的猫
本文链接:https://www.chengpengper.cn/archives/117/
转载时须注明出处及本声明