クラスLinkedHashSet<E>

型パラメータ:
E - このセットによって保守される要素のタイプ
すべての実装されたインタフェース:
Serializable, Cloneable, Iterable<E>, Collection<E>, SequencedCollection<E>, SequencedSet<E>, Set<E>

public class LinkedHashSet<E> extends HashSet<E> implements SequencedSet<E>, Cloneable, Serializable

Setインタフェースのハッシュ表およびリンク・リスト実装。検出順序は明確に定義されています。 この実装は、HashSetとは異なります。これは、すべてのエントリを経由して実行される二重リンク・リストを保持する点です。 このリンク・リストは、検出順序(反復順序)を定義します。これは、要素がセット(insertion-order)に挿入された順序です。 最も最近挿入された要素(最年長)が最初で、最も新しい要素が最後です。 要素がaddメソッドでセットにre-insertedの場合、出現順序は影響を受けません。 (s.contains(e)が呼出しの直前にtrueを返すときにs.add(e)が呼び出されると、eがセットsに再挿入されます。) このセットの逆順のビューは逆の順序で、最年少の要素が最初に表示され、最年長の要素が最後に表示されます。 セットにすでに存在する要素の出現順序は、addFirstおよびaddLastメソッドを使用して変更できます。

この実装では、HashSetで提供される未指定(無秩序)の順序がクライアントで起きることはありません(TreeSetのように負荷が増えることもありません)。 この実装を使用することで、元のセットの実装にかかわらず、元のセットと同じ順序のコピーを作成できます。

    void foo(Set<String> s) {
        Set<String> copy = new LinkedHashSet<>(s);
        ...
    }
この技術は、モジュールが入力としてセットを取り、それをコピーし、順序がコピーの順序で決まる結果を返す場合に、特に役立ちます。 (クライアントは一般的に、渡された順序で返されることを想定します。)

このクラスは、オプションのSetおよびSequencedSet操作をすべて提供し、null要素を許可します。 HashSetと同様、ハッシュ関数がバケット間で要素を適切に分散すると、基本操作(addcontainsおよびremove)に対して一定時間のパフォーマンスが提供されます。 リンク・リストを維持する追加コストが1つあるため、パフォーマンスはHashSetのパフォーマンスのわずかに下回る可能性があります: LinkedHashSetに対する反復には、その容量に関係なく、セットのsizeに比例した時間が必要です。 HashSetに対する反復は、その「容量」に比例した時間を必要とする、より高コストになる可能性があります。

リンク・ハッシュ・セットには、パフォーマンスに影響を及ぼすパラメータが2つあります。初期容量負荷係数です。 これらは、HashSetの場合と同様に正確に定義されます。 ただし、このクラスの反復時間は容量の影響を受けないため、初期容量に対して過度に高い値を選択するペナルティは、HashSetよりも厳しいです。

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

  Set s = Collections.synchronizedSet(new LinkedHashSet(...));

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

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

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

導入されたバージョン:
1.4
関連項目:
  • コンストラクタのサマリー

    コンストラクタ
    コンストラクタ
    説明
    デフォルトの初期容量(16)と負荷係数(0.75)で新しい空のリンク・ハッシュ・セットを構築します。
    LinkedHashSet(int initialCapacity)
    指定された初期容量とデフォルトの負荷係数(0.75)で新しい空のリンク・ハッシュ・セットを構築します。
    LinkedHashSet(int initialCapacity, float loadFactor)
    指定された初期容量と負荷係数で新しい空のリンク・ハッシュ・セットを構築します。
    LinkedHashSet(Collection<? extends E> c)
    指定されたコレクションと同じ要素で新しいリンク・ハッシュ・セットを構築します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    void
    このコレクションの最初の要素として要素を追加します (オプションの操作)。
    void
    このコレクションの最後の要素として要素を追加します (オプションの操作)。
    このコレクションの最初の要素を取得します。
    このコレクションの最後の要素を取得します。
    static <T> LinkedHashSet<T>
    newLinkedHashSet(int numElements)
    予想される要素数に適した新しい空のLinkedHashSetを作成します。
    このコレクションの最初の要素を削除して返します(オプションの操作)。
    このコレクションの最後の要素を削除して返します(オプションの操作)。
    このコレクションの逆順viewを返します。
    このセット内の要素に対する遅延バインディングおよびフェイルファスト Spliteratorを作成します。

    クラスで宣言されたメソッド HashSet

    add, clear, clone, contains, isEmpty, iterator, newHashSet, remove, size, toArray, toArray
    修飾子と型
    メソッド
    説明
    boolean
    add(E e)
    指定された要素がセットの要素として存在しない場合に、その要素をセットに追加します。
    void
    すべての要素をセットから削除します。
    このHashSetインスタンスのシャロー・コピーを返します: 要素自体はクローンされません。
    boolean
    指定された要素がこのセットに含まれている場合にtrueを返します。
    boolean
    このセットに要素が1つも含まれていない場合にtrueを返します。
    セット内の各要素についてのイテレータを返します。
    static <T> HashSet<T>
    newHashSet(int numElements)
    予想される要素数に適した新しい空のHashSetを作成します。
    boolean
    指定された要素がこのセットに存在する場合に、要素をセットから削除します。
    int
    セット内の要素数(そのカーディナリティ)を返します。
    このコレクションの要素がすべて格納されている配列を返します。
    <T> T[]
    toArray(T[] a)
    このコレクション内のすべての要素を保持する配列を返します。返される配列の実行時の型は、指定された配列の型です。

    クラスで宣言されたメソッド AbstractSet

    equals, hashCode, removeAll
    修飾子と型
    メソッド
    説明
    boolean
    指定されたオブジェクトがセットと同じかどうかを比較します。
    int
    セットのハッシュ・コード値を返します。
    boolean
    このセットから、指定されたコレクションに含まれる要素をすべて削除します(オプションの操作)。

    クラスで宣言されたメソッド AbstractCollection

    addAll, containsAll, retainAll, toArray, toArray, toString
    修飾子と型
    メソッド
    説明
    boolean
    addAll(Collection<? extends E> c)
    指定されたコレクションのすべての要素をこのコレクションに追加します(オプションの操作)。
    boolean
    指定したコレクションのすべての要素がこのコレクションに含まれている場合、trueを返します。
    boolean
    このコレクションにおいて、指定されたコレクションに格納されている要素だけを保持します(オプションの操作)。
    このコレクションの要素がすべて格納されている配列を返します。
    <T> T[]
    toArray(T[] a)
    このコレクション内のすべての要素を保持する配列を返します。返される配列の実行時の型は、指定された配列の型です。
    このコレクションの文字列表現を返します。

    クラスオブジェクトで宣言されたメソッド

    finalize, getClass, notify, notifyAll, wait, wait, wait
    修飾子と型
    メソッド
    説明
    protected void
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    最終決定は非推奨であり、将来のリリースで削除される可能性があります。
    final Class<?>
    このObjectの実行時クラスを返します。
    final void
    このオブジェクトのモニターで待機中のスレッドを1つ再開します。
    final void
    このオブジェクトのモニターで待機中のすべてのスレッドを再開します。
    final void
    現在のスレッドが目覚めるまで待機します。通常、notifiedまたはinterruptedです。
    final void
    wait(long timeoutMillis)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
    final void
    wait(long timeoutMillis, int nanos)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。

    インタフェースCollectionで宣言されたメソッド

    parallelStream, removeIf, stream, toArray
    修飾子と型
    メソッド
    説明
    default Stream<E>
    このコレクションをソースとして、潜在的に並列のStreamを返します。
    default boolean
    removeIf(Predicate<? super E> filter)
    指定された述語(オプションの操作)を満たす、このコレクションのすべての要素を削除します。
    default Stream<E>
    このコレクションをソースとして使用して、逐次的なStreamを返します。
    default <T> T[]
    toArray(IntFunction<T[]> generator)
    指定されたgenerator関数を使用してこのコレクションのすべての要素を含む配列を返し、返された配列を割り当てます。

    インタフェースIterableで宣言されたメソッド

    forEach
    修飾子と型
    メソッド
    説明
    default void
    forEach(Consumer<? super E> action)
    Iterableの各要素に対して指定されたアクションを、すべての要素が処理されるか、アクションが例外をスローするまで実行します。

    インタフェースSetで宣言されたメソッド

    addAll, containsAll, retainAll
    修飾子と型
    メソッド
    説明
    boolean
    addAll(Collection<? extends E> c)
    指定されたコレクションのすべての要素について、その要素がこのセット内にない場合、セットに追加します(オプションの操作)。
    boolean
    指定されたコレクションのすべての要素がこのセットに含まれている場合にtrueを返します。
    boolean
    セット内の要素のうち、指定されたコレクション内にある要素だけを保持します(オプションの操作)。
  • コンストラクタの詳細

    • LinkedHashSet

      public LinkedHashSet(int initialCapacity, float loadFactor)
      指定された初期容量と負荷係数で新しい空のリンク・ハッシュ・セットを構築します。
      APIのノート:
      予想される要素数に対応する初期容量を持つLinkedHashSetを作成するには、newLinkedHashSetを使用します。
      パラメータ:
      initialCapacity - リンク・ハッシュ・セットの初期容量
      loadFactor - リンク・ハッシュ・セットの負荷係数
      スロー:
      IllegalArgumentException - 初期容量がゼロよりも小さい場合、または負荷係数が正でない場合
    • LinkedHashSet

      public LinkedHashSet(int initialCapacity)
      指定された初期容量とデフォルトの負荷係数(0.75)で新しい空のリンク・ハッシュ・セットを構築します。
      APIのノート:
      予想される要素数に対応する初期容量を持つLinkedHashSetを作成するには、newLinkedHashSetを使用します。
      パラメータ:
      initialCapacity - LinkedHashSetの初期容量
      スロー:
      IllegalArgumentException - 初期容量がゼロよりも小さい場合
    • LinkedHashSet

      public LinkedHashSet()
      デフォルトの初期容量(16)と負荷係数(0.75)で新しい空のリンク・ハッシュ・セットを構築します。
    • LinkedHashSet

      public LinkedHashSet(Collection<? extends E> c)
      指定されたコレクションと同じ要素で新しいリンク・ハッシュ・セットを構築します。 指定されたコレクションとデフォルトの負荷係数(0.75)で要素を保持するのに十分な初期容量で、リンク・ハッシュ・セットが作成されます。
      パラメータ:
      c - 要素がこのセットに配置されるコレクション
      スロー:
      NullPointerException - 指定されたコレクションがnullである場合
  • メソッドの詳細

    • spliterator

      public Spliterator<E> spliterator()
      このセット内の要素に対する遅延バインディングおよびフェイルファスト Spliteratorを作成します。

      Spliteratorは、Spliterator.SIZEDSpliterator.DISTINCTおよびORDEREDを報告します。 実装は、追加の特性値の報告をドキュメント化する必要があります。

      定義:
      spliterator、インタフェースCollection<E>
      定義:
      spliterator、インタフェースIterable<E>
      定義:
      spliterator、インタフェースSet<E>
      オーバーライド:
      spliterator、クラスHashSet<E>
      実装上のノート:
      実装は、セットのIteratorから遅延バインディング・スプリッテレータを作成します。 スプリッテレータは、セットのイテレータのフェイルファスト・プロパティを継承します。 作成されたSpliteratorは、追加でSpliterator.SUBSIZEDを報告します。
      戻り値:
      このセット内の要素に対するSpliterator
      導入されたバージョン:
      1.8
    • newLinkedHashSet

      public static <T> LinkedHashSet<T> newLinkedHashSet(int numElements)
      予想される要素数に適した新しい空のLinkedHashSetを作成します。 返されるセットではデフォルトのロード係数0.75が使用され、初期容量は通常十分に大きいため、セットのサイズを変更せずに必要なファクタ数を追加できます。
      型パラメータ:
      T - 新しいセットによって保持される要素のタイプ
      パラメータ:
      numElements - 予想される要素数
      戻り値:
      新しく作成されたセット
      スロー:
      IllegalArgumentException - numElementsが負の場合
      導入されたバージョン:
      19
    • addFirst

      public void addFirst(E e)
      このコレクションの最初の要素として要素を追加します (オプションの操作)。 この操作が正常に完了すると、指定された要素はこのコレクションのメンバーになり、発生順に最初の要素になります。

      このセットにすでに要素が含まれている場合は、最初に検出された順序になるように、必要に応じて再配置されます。

      定義:
      インタフェースSequencedCollection<E>内のaddFirst
      パラメータ:
      e - 追加する要素
      導入されたバージョン:
      21
    • addLast

      public void addLast(E e)
      このコレクションの最後の要素として要素を追加します (オプションの操作)。 この操作が正常に完了すると、指定された要素はこのコレクションのメンバーになり、最後の要素が出現順になります。

      このセットにすでに要素が含まれている場合は、最後に検出された順序になるように、必要に応じて再配置されます。

      定義:
      インタフェースSequencedCollection<E>内のaddLast
      パラメータ:
      e - 追加する要素。
      導入されたバージョン:
      21
    • getFirst

      public E getFirst()
      このコレクションの最初の要素を取得します。
      定義:
      インタフェースSequencedCollection<E>内のgetFirst
      戻り値:
      取得された要素
      スロー:
      NoSuchElementException - このコレクションが空の場合
      導入されたバージョン:
      21
    • getLast

      public E getLast()
      このコレクションの最後の要素を取得します。
      定義:
      インタフェースSequencedCollection<E>内のgetLast
      戻り値:
      取得された要素
      スロー:
      NoSuchElementException - このコレクションが空の場合
      導入されたバージョン:
      21
    • removeFirst

      public E removeFirst()
      このコレクションの最初の要素を削除して返します(オプションの操作)。
      定義:
      インタフェースSequencedCollection<E>内のremoveFirst
      戻り値:
      削除される要素
      スロー:
      NoSuchElementException - このコレクションが空の場合
      導入されたバージョン:
      21
    • removeLast

      public E removeLast()
      このコレクションの最後の要素を削除して返します(オプションの操作)。
      定義:
      インタフェースSequencedCollection<E>内のremoveLast
      戻り値:
      削除される要素
      スロー:
      NoSuchElementException - このコレクションが空の場合
      導入されたバージョン:
      21
    • reversed

      public SequencedSet<E> reversed()
      このコレクションの逆順viewを返します。 返されるビュー内の要素の出現順序は、このコレクション内の要素の出現順序の逆です。 逆の順序付けは、返されるビューのビュー・コレクションに含まれるすべての順序依存操作に影響します。 コレクション実装でこのビューの変更が許可されている場合、ベースとなるコレクションへの変更"ライトスルー"。 実装によっては、基礎となるコレクションに対する変更が、この逆方向ビューに表示される場合と表示されない場合があります。

      逆方向ビューへの変更は許可され、このセットに伝播されます。 また、このセットに対する変更は、逆方向ビューに表示されます。

      定義:
      インタフェースSequencedCollection<E>内のreversed
      定義:
      インタフェースSequencedSet<E>内のreversed
      戻り値:
      このコレクションの逆順ビュー(SequencedSetとして)
      導入されたバージョン:
      21