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);
}
Last modification:September 16th, 2020 at 04:18 pm
如果觉得我的文章对你有用,请随意赞赏