クラスLinkedHashSet<E>
- 型パラメータ:
E- このセットによって保守される要 のタイプ
- すべての実装されたインタフェース:
Serializable,Cloneable,Iterable<E>,Collection<E>,SequencedCollection<E>,SequencedSet<E>,Set<E>
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と同様、ハッシュ関数がバケット間で要 を適切に分散すると、基本操作(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) 指定されたコレクションと同じ要 で新しいリンク・ハッシュ・セットを構築します。 -
メソッドのサマリー
修飾子と型メソッド説明voidこのコレクションの最初の要 として要 を追 します (オプションの操作)。voidこのコレクションの最後の要 として要 を追 します (オプションの操作)。getFirst()このコレクションの最初の要 を取得します。getLast()このコレクションの最後の要 を取得します。static <T> LinkedHashSet<T> newLinkedHashSet(int numElements) 予想される要 数に適した新しい空のLinkedHashSetを作成します。このコレクションの最初の要 を削除して返します(オプションの操作)。このコレクションの最後の要 を削除して返します(オプションの操作)。reversed()このコレクションの逆 viewを返します。このセット内の要 に対する遅延バインディングおよびフェイルファスト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
-
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
-