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
をスローします。このように、並行して変更が行われると、イテレータは、将来の予測できない時点において予測できない動作が発生する危険を回避するために、ただちにかつ手際よく例外をスローします。
イテレータのフェイルファスト動作は実際には保証できません。一般的に、synchronized なしの並行変更がある場合、確実に保証することは不可能です。フェイルファストイテレータは、ベストエフォートベースで ConcurrentModificationException をスローします。したがって、正確を期すためにこの例外に依存するプログラムを書くことは誤りです。イテレータのフェイルファスト動作はバグを検出するためにのみ使用すべきです。
このクラスは、Java Collections Framework のメンバーです。
Object.hashCode()
, Collection
, Set
, HashSet
, TreeSet
, Hashtable
, 直列化された形式コンストラクタと説明 |
---|
LinkedHashSet()
デフォルトの初期容量 (16) と負荷係数 (0.75) で新しい空のリンクハッシュセットを構築します。
|
LinkedHashSet(Collection<? extends E> c)
指定されたコレクションと同じ要素で新しいリンクハッシュセットを構築します。
|
LinkedHashSet(int initialCapacity)
指定された初期容量とデフォルトの負荷係数 (0.75) で新しい空のリンクハッシュセットを構築します。
|
LinkedHashSet(int initialCapacity, float loadFactor)
指定された初期容量と負荷係数で新しい空のリンクハッシュセットを構築します。
|
equals, hashCode, removeAll
addAll, containsAll, retainAll, toArray, toArray, toString
public LinkedHashSet(int initialCapacity, float loadFactor)
initialCapacity
- リンクハッシュセットの初期容量loadFactor
- リンクハッシュセットの負荷係数IllegalArgumentException
- 初期容量がゼロよりも小さい場合、または負荷係数が正でない場合public LinkedHashSet(int initialCapacity)
initialCapacity
- LinkedHashSet の初期容量IllegalArgumentException
- 初期容量がゼロよりも小さい場合public LinkedHashSet()
public LinkedHashSet(Collection<? extends E> c)
c
- 要素がこのセットに配置されるコレクションNullPointerException
- 指定されたコレクションが null である場合 バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.