モジュール java.base
パッケージ java.util

クラスTreeSet<E>

java.lang.Object
型パラメータ:
E - このセットで保持される要素の型
すべての実装されたインタフェース:
Serializable, Cloneable, Iterable<E>, Collection<E>, NavigableSet<E>, SequencedCollection<E>, SequencedSet<E>, Set<E>, SortedSet<E>

public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, Serializable
TreeMapに基づくNavigableSet実装です。 要素の順序付けは、自然順序付けを使って行われるか、セット構築時に提供されるComparatorを使って行われます。そのどちらになるかは、使用するコンストラクタによって決まります。

この実装は、基本オペレーション(addremove、およびcontains)に保証済みのlog(n)時間コストを提供します。

あるセットがSetインタフェースを正しく実装するには、明示的なコンパレータが提供されているかどうかにかかわらず、そのセットによって維持される順序付けがequalsとの一貫性のあるものでなければいけないことに注意してください。 (equalsとの一貫性の正確な定義については、ComparableまたはComparatorを参照してください。) これはSetインタフェースがequalsオペレーションに基づいて定義されるためですが、TreeSetインスタンスはそのcompareToメソッドまたはcompareメソッドを使用してすべての要素比較を実行するので、このメソッドによって等価と見なされる2つの要素は、セットの見地からすれば同じものです。 セットの動作は、その順序付けがequalsと一貫性がない場合でも明確に定義されていますが、Setインタフェースの一般規約には準拠していません。

この実装はsynchronizedされません。 複数のスレッドが並行してツリー・セットにアクセスし、それらのスレッドの少なくとも1つがセットを変更する場合には、外部で同期をとる必要があります これは通常、セットを自然にカプセル化する一部のオブジェクトでsynchronizedすることによって達成されます。 そのようなオブジェクトが存在しない場合は、Collections.synchronizedSortedSetメソッドを使用してセットを「ラップ」することをお薦めします。 セットが誤ってsynchronizedなしでアクセスされるのを防ぐために、作成時に行うことをお薦めします。

   SortedSet s = Collections.synchronizedSortedSet(new TreeSet(...));

このクラスのiteratorメソッドによって返されるイテレータは、フェイルファストです。イテレータの作成後に、イテレータ自体のremoveメソッド以外の方法でセットが変更されると、イテレータはConcurrentModificationExceptionをスローします。 このように、並行して変更が行われると、イテレータは、将来の予測できない時点において予測できない動作が発生する危険を回避するために、ただちにかつ手際よく例外をスローします。

通常、非同期の並行変更がある場合、確かな保証を行うことは不可能なので、イテレータのフェイルファストの動作を保証することはできません。 フェイルファスト・イテレータは、ベスト・エフォート・ベースでConcurrentModificationExceptionをスローします。 したがって、正確を期すためにこの例外に依存するプログラムを書くことは誤りです。イテレータのフェイルファストの動作はバグを検出するためにのみ使用すべきです。

このクラスのaddFirstおよびaddLastメソッドは、UnsupportedOperationExceptionをスローします。 要素の検索順序は比較メソッドによって決定されるため、明示的な配置はサポートされていません。

このクラスは、Java Collections Frameworkのメンバーです。

導入されたバージョン:
1.2
関連項目: