- 型パラメータ:
E
- このセットで保持される要素の型
- すべての実装されたインタフェース:
Serializable
,Cloneable
,Iterable<E>
,Collection<E>
,Set<E>
public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, Serializable
予測可能な反復順序を持つSet
インタフェースのハッシュ表とリンク・リストの実装です。 この実装は、すべてのエントリをまたがる二重のリンク・リストを保持するという点で、HashSet
とは異なります。 このリンク・リストは、反復順序を定義します。この順序は、要素がセットに挿入された順序です(挿入順)。 要素がセットに再挿入されても、挿入順は影響を受けません。 s.add(e)
が呼び出された場合、呼出しの直前にs.contains(e)
がtrue
を返しても、要素e
がセットs
に再挿入されます。
この実装では、HashSet
で提供される未指定(無秩序)の順序がクライアントで起きることはありません(TreeSet
のように負荷が増えることもありません)。 この実装を使用することで、元のセットの実装にかかわらず、元のセットと同じ順序のコピーを作成できます。
void foo(Set s) { Set copy = new LinkedHashSet(s); ... }この技術は、モジュールが入力としてセットを取り、それをコピーし、順序がコピーの順序で決まる結果を返す場合に、特に役立ちます。 クライアントは一般的に、渡された順序で返されることを想定します。
このクラスは、オプションのSet
オペレーションをすべて提供し、null要素を許容します。 HashSet
と同じく、ハッシュ関数が複数のバケットに適切に要素を分散すると仮定して、基本のオペレーション(add
、contains
、およびremove
)に一定時間のパフォーマンスを提供します。 パフォーマンスは、1つの例外を除いて、リンク・リストを保持する負荷が増えるために、HashSet
のパフォーマンスより少し劣る傾向があります。LinkedHashSet
の反復には、容量にかかわらず、セットのサイズに比例した時間が必要になります。 容量に比例した時間を必要とするので、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
- 関連項目:
Object.hashCode()
,Collection
,Set
,HashSet
,TreeSet
,Hashtable
, 直列化された形式
-
コンストラクタのサマリー
コンストラクタ コンストラクタ 説明 LinkedHashSet()
デフォルトの初期容量(16)と負荷係数(0.75)で新しい空のリンク・ハッシュ・セットを構築します。LinkedHashSet(int initialCapacity)
指定された初期容量とデフォルトの負荷係数(0.75)で新しい空のリンク・ハッシュ・セットを構築します。LinkedHashSet(int initialCapacity, float loadFactor)
指定された初期容量と負荷係数で新しい空のリンク・ハッシュ・セットを構築します。LinkedHashSet(Collection<? extends E> c)
指定されたコレクションと同じ要素で新しいリンク・ハッシュ・セットを構築します。 -
メソッドのサマリー
修飾子と型 メソッド 説明 Spliterator<E>
spliterator()
このセット内の要素に対する遅延バインディングおよびフェイルファストSpliterator
を作成します。クラス 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)指定された初期容量と負荷係数で新しい空のリンク・ハッシュ・セットを構築します。- パラメータ:
initialCapacity
- リンク・ハッシュ・セットの初期容量loadFactor
- リンク・ハッシュ・セットの負荷係数- 例外:
IllegalArgumentException
- 初期容量がゼロよりも小さい場合、または負荷係数が正でない場合
-
LinkedHashSet
public LinkedHashSet(int initialCapacity)指定された初期容量とデフォルトの負荷係数(0.75)で新しい空のリンク・ハッシュ・セットを構築します。- パラメータ:
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
-