Java集合·13·TreeSet详解

一、概述

是一个不含重复元素,有序的集合类。作用为提供有序的Set集合。

继承自AbstractSet,实现了NavigableSet、Cloneable、Serializable接口。

SortedSet

Sorted相关方法,分为三类:

一类是获取元素项的方法,包括first()、last()

一类是获取元素集合的方法,包括subSet()、headSet()、tailSet()

一类是获取Comparator的方法,包括comparator()

NavigdationSet

导航相关方法,可以分为三类:

一类是提供元素项的导航方法,返回某个元素。包括lower()、floor()、ceiling()、higher()。ower、floor、ceiling 和 higher 分别返回小于、小于等于、大于等于、大于给定元素的元素,如果不存在这样的元素,则返回 null。

一类是提供元素集合的导航方法,返回元素集合。包括subSet()、headSet()、tailSet()、descendingSet()

一类是Iterator,返回Iterator。包括iterator()、descendingIterator()

二、特点

  • 不含重复元素
  • 不容许null值
  • 有序,支持Comparator比较器

三、数据结构

使用NavigationMap(TreeMap)作为存储

private transient NavigableMap m;

TreeSet(NavigableMap m) {
        this.m = m;
}

四、实现要点

1.构造方法

基于NavigationMap生成

    TreeSet(NavigableMap m) {
        this.m = m;
    }

    public TreeSet() {
        this(new TreeMap());
    }
    public TreeSet(Comparator comparator) {
        this(new TreeMap<>(comparator));
    }
    public TreeSet(Collection c) {
        this();
        addAll(c);
    }
    public TreeSet(SortedSet s) {
        this(s.comparator());
        addAll(s);
    }

2. 基本方法

添加,PRESENT为傀儡数据(Dummy value)

public boolean add(E e) {
    return m.put(e, PRESENT)==null;
}

删除

public boolean remove(Object o) {
    return m.remove(o)==PRESENT;
}

3. 访问方法

仅支持一种访问方法:Iterator

Iterator

Iterator可以分为顺序iterator和逆序descendingIterator,使用NavigationMap的keySet的Iterator/descendingKeySet的Iterator

    public Iterator iterator() {
        return m.navigableKeySet().iterator();
    }
public Iterator descendingIterator() {
    return m.descendingKeySet().iterator();
}

4.导航方法

分为两类介绍,返回单个元素和返回元素集合:

返回单个元素,直接调用NavigationMap的对应方法

public E first() {
    return m.firstKey();
}

返回元素集合,返回NavigationMap中对应的集合(NavigationMap),并转化为NavigationSet,引用未变

public NavigableSet headSet(E toElement, boolean inclusive) {
    return new TreeSet<>(m.headMap(toElement, inclusive));
}

你可能感兴趣的:(Java集合·13·TreeSet详解)