データ構造 - TreeSetの

簡単な紹介

TreeSetのは、時に実際に注文したコレクションに挿入される配列を比較するために、一定のルールに従って自動的に話せるように要素に追加され、設定のバリアントは、機能が設定されているソート達成することができますについて説明し、それそれは、TreeMapのキーを使用していますHashSetの、LinkedHashSetのようなTreeMapを、カプセル化したものです。

TreeSetのクラス
public class TreeSet<E> extends AbstractSet<E>
        implements NavigableSet<E>, Cloneable, java.io.Serializable

継承AbstractSet NavigableSetを実装する抽象クラス インターフェース

public interface NavigableSet<E> extends SortedSet<E>

NavigableSetは、あなたが最も近い要素を取得することができ、たSortedSetを拡張しました。この要素が存在しない場合、方法は、下部、床、天井、それぞれ、未満、以下で高い戻り、以上で、要素に指定された要素よりも大きいが、NULLが返されます。

// 返回此set中小于给定元素的最大元素,如果没有这样的元素,则返回NULL。
E lower(E e);
// 返回此集合中小于或等于给定元素的最大元素,如果没有这样的元素,则返回NULL。
E floor(E e);
// 返回此set中大于或等于给定元素的最小元素,如果没有这样的元素,则返回NULL。
E ceiling(E e);
// 返回此set中大于给定元素的最小元素,如果没有这样的元素,则返回NULL。
E higher(E e);
// 检索并删除第一个最小元素。如果没有这样的元素,则返回null。
E pollFirst();
// 检索并删除最后一个最高元素。如果没有这样的元素,则返回null。
E pollLast();
// 迭代器
Iterator<E> iterator();
// 返回此 set 中所包含元素的逆序视图。
NavigableSet<E> descendingSet();
// 以降序返回在此 set 的元素上进行迭代的迭代器。
Iterator<E> descendingIterator();
// 返回此 set 的部分视图,其元素范围从 fromElement 到 toElement。
NavigableSet<E> subSet(E fromElement, boolean fromInclusive,
                       E toElement,   boolean toInclusive);
// 返回此 set 的部分视图,其元素小于(或等于,如果 inclusive 为 true)toElement。
NavigableSet<E> headSet(E toElement, boolean inclusive);
//  返回此 set 的部分视图,其元素大于(或等于,如果 inclusive 为 true)fromElement。
NavigableSet<E> tailSet(E fromElement, boolean inclusive);
// 返回此 set 的部分视图,其元素从 fromElement(包括)到 toElement(不包括)。
SortedSet<E> subSet(E fromElement, E toElement);
// 返回此 set 的部分视图,其元素严格小于 toElement。
SortedSet<E> headSet(E toElement);
// 返回此 set 的部分视图,其元素大于(或等于,如果 inclusive 为 true)fromElement。
SortedSet<E> tailSet(E fromElement);
SortedSet インターフェース
public interface SortedSet<E> extends Set<E>

コンパレータが空の場合にSortedSetは自然な順序、次いで、コンパレータの要素に従ってソート

SortedSet 方法
// 获取比较器
Comparator<? super E> comparator();
// 获取两个元素直接的元素集
SortedSet<E> subSet(E fromElement, E toElement);
// 获取之前的元素
SortedSet<E> headSet(E toElement);
// 获取之后的元素
SortedSet<E> tailSet(E fromElement);
// 第一个元素
E first();
// 最后一个元素
E last();
TreeSetのプロパティ
// NavigableMap对象(NavigableMap下就一个TreeMap实现)
private transient NavigableMap<E,Object> m;
// 固定常量作为Map值
private static final Object PRESENT = new Object();

NavigableMapのは、TreeMapの記事を見ることができます

TreeSetのコンストラクタ
TreeSet(NavigableMap<E,Object> m) {
    this.m = m;
}
public TreeSet() {
    this(new TreeMap<E,Object>());
}
public TreeSet(Comparator<? super E> comparator) {
    this(new TreeMap<>(comparator));
}
public TreeSet(Collection<? extends E> c) {
    this();
    addAll(c);
}
public TreeSet(SortedSet<E> s) {
    this(s.comparator());
    addAll(s);
}

TreeSetのは、TreeMapの中で実際にTreeMapの内部構造は、赤黒木、それはここでしかキー、固定定数値であります

TreeSetのベースのアプローチ
// 长度
public int size() {
    return m.size();
}
// 是否为空
public boolean isEmpty() {
    return m.isEmpty();
}
// 是否存在
public boolean contains(Object o) {
    return m.containsKey(o);
}
// 添加
public boolean add(E e) {
    return m.put(e, PRESENT)==null;
}
// 删除
public boolean remove(Object o) {
    return m.remove(o)==PRESENT;
}
// 清空
public void clear() {
    m.clear();
}

ホワイトキーはTreeMapのを使用することであると述べました

TreeSetの検索
// 第一个元素
public E first() {
    return m.firstKey();
}
// 最后一个元素
public E last() {
    return m.lastKey();
}
// 获取最接近e的节点(小于等于)
public E lower(E e) {
    return m.lowerKey(e);
}
// 获取最接近e的节点(大于等于)
public E floor(E e) {
    return m.floorKey(e);
}

TreeMapのTreeSetの検索は、他の方法は、TreeMapの記事を参照することができ、赤黒木ベースの検索です。

おすすめ

転載: www.cnblogs.com/yuanjiangnan/p/12641321.html