- 型パラメータ:
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
-
コンストラクタの詳細
-
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.SIZED
、Spliterator.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
-