- 型パラメータ:
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
-