- 型パラメータ:
- E- このセットで保持される要素の型
- すべての実装されたインタフェース:
- Serializable,- Cloneable,- Iterable<E>,- Collection<E>,- Set<E>
Setインタフェースのハッシュ表およびリンク・リスト実装(予測可能な反復順序)。 この実装は、HashSetとは異なります。これは、すべてのエントリを経由して実行される二重リンク・リストを保持する点です。 このリンク・リストは、反復順序を定義します。この順序は、要素がセットに挿入された順序です(挿入順)。 要素がセットに再挿入されても、挿入順は影響を受けません。 (s.contains(e)が呼出しの直前にtrueを返すときにs.add(e)が呼び出されると、eがセットsに再挿入されます。) 
 
この実装では、HashSetで提供される未指定(無秩序)の順序がクライアントで起きることはありません(TreeSetのように負荷が増えることもありません)。 この実装を使用することで、元のセットの実装にかかわらず、元のセットと同じ順序のコピーを作成できます。 
 
     void foo(Set<String> s) {
         Set<String> copy = new LinkedHashSet<>(s);
         ...
     }
 このクラスは、オプションのSet操作をすべて提供し、null要素を許可します。 HashSetと同様、ハッシュ関数がバケット間で要素を適切に分散すると、基本操作(add、containsおよび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) 指定されたコレクションと同じ要素で新しいリンク・ハッシュ・セットを構築します。
- 
メソッドのサマリー修飾子と型メソッド説明static <T> LinkedHashSet<T>newLinkedHashSet(int numElements) 予想される要素数に適した新しい空のLinkedHashSetを作成します。このセット内の要素に対する遅延バインディングおよびフェイルファストSpliteratorを作成します。クラス java.util.HashSetで宣言されたメソッドadd, clear, clone, contains, isEmpty, iterator, newHashSet, remove, size, toArray, toArrayクラス java.util.AbstractSetで宣言されたメソッドequals, hashCode, removeAllクラス java.util.AbstractCollectionで宣言されたメソッドaddAll, containsAll, retainAll, toArray, toArray, toStringインタフェース java.util.Collectionで宣言されたメソッドparallelStream, removeIf, stream, toArray
- 
コンストラクタの詳細- 
LinkedHashSetpublic LinkedHashSet(int initialCapacity, float loadFactor) 指定された初期容量と負荷係数で新しい空のリンク・ハッシュ・セットを構築します。- APIのノート:
- 予想される要素数に対応する初期容量を持つLinkedHashSetを作成するには、newLinkedHashSetを使用します。
- パラメータ:
- initialCapacity- リンク・ハッシュ・セットの初期容量
- loadFactor- リンク・ハッシュ・セットの負荷係数
- 例外:
- IllegalArgumentException- 初期容量がゼロよりも小さい場合、または負荷係数が正でない場合
 
- 
LinkedHashSetpublic LinkedHashSet(int initialCapacity) 指定された初期容量とデフォルトの負荷係数(0.75)で新しい空のリンク・ハッシュ・セットを構築します。- APIのノート:
- 予想される要素数に対応する初期容量を持つLinkedHashSetを作成するには、newLinkedHashSetを使用します。
- パラメータ:
- initialCapacity- LinkedHashSetの初期容量
- 例外:
- IllegalArgumentException- 初期容量がゼロよりも小さい場合
 
- 
LinkedHashSetpublic LinkedHashSet()デフォルトの初期容量(16)と負荷係数(0.75)で新しい空のリンク・ハッシュ・セットを構築します。
- 
LinkedHashSetpublic LinkedHashSet(Collection<? extends E> c) 指定されたコレクションと同じ要素で新しいリンク・ハッシュ・セットを構築します。 指定されたコレクションとデフォルトの負荷係数(0.75)で要素を保持するのに十分な初期容量で、リンク・ハッシュ・セットが作成されます。- パラメータ:
- c- 要素がこのセットに配置されるコレクション
- 例外:
- NullPointerException- 指定されたコレクションがnullである場合
 
 
- 
- 
メソッドの詳細- 
spliteratorpublic Spliterator<E> spliterator()このセット内の要素に対する遅延バインディングおよびフェイルファストSpliteratorを作成します。Spliteratorは、Spliterator.SIZED、Spliterator.DISTINCTおよびORDEREDを報告します。 実装は、追加の特性値の報告をドキュメント化する必要があります。- 定義:
- spliterator、インタフェース- Collection<E>
- 定義:
- spliterator、インタフェース- Iterable<E>
- 定義:
- spliterator、インタフェース- Set<E>
- オーバーライド:
- spliterator、クラス- HashSet<E>
- 実装上のノート:
- 実装は、セットのIteratorから遅延バインディング・スプリッテレータを作成します。 スプリッテレータは、セットのイテレータのフェイルファスト・プロパティを継承します。 作成されたSpliteratorは、追加でSpliterator.SUBSIZEDを報告します。
- 戻り値:
- このセット内の要素に対するSpliterator
- 導入されたバージョン:
- 1.8
 
- 
newLinkedHashSetpublic static <T> LinkedHashSet<T> newLinkedHashSet(int numElements) 予想される要素数に適した新しい空のLinkedHashSetを作成します。 返されるセットではデフォルトのロード係数0.75が使用され、初期容量は通常十分に大きいため、セットのサイズを変更せずに必要なファクタ数を追加できます。- 型パラメータ:
- T- 新しいセットによって保持される要素のタイプ
- パラメータ:
- numElements- 予想される要素数
- 戻り値:
- 新しく作成されたセット
- 例外:
- IllegalArgumentException- numElementsが負の場合
- 導入されたバージョン:
- 19
 
 
-