|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object java.util.AbstractCollection<E> java.util.AbstractSet<E> java.util.HashSet<E> java.util.LinkedHashSet<E>
E
- このセットが保持する要素の型public class LinkedHashSet<E>
予測可能な繰り返し順序を持つ Set インタフェースのハッシュテーブルとリンクリストの実装です。この実装は、すべての実装のエントリを経る二重のリンクリストを保持するという点で、HashSet とは異なります。リンクリストは、繰り返し順序を定義します。 この順序は、要素がセットに挿入された順序です (挿入順) 。要素をセットに「再挿入」する場合、挿入順は影響を受けません。呼び出しの直前に、s.contains(e) が true を返すときに s.add(e) が呼び出された場合、要素 e がセット s に再挿入されます。
この実装では、TreeSet
関連の負担の増大を負わずに、HashSet
による、無指定の一般には無秩序な順序からクライアントを守ります。この実装を使用して、当初のセットの実装にかかわらず、当初のセットと同じ順序を持つセットのコピーを生成することができます。
void foo(Set s) { Set copy = new LinkedHashSet(s); ... }モジュールが入力のセットを取得し、コピーして、コピーのセットが設定した順序の結果を返した場合、この技術は特に役立ちます。一般的に、クライアントは提示と同じ順序で返されることを評価します。
このクラスは、オプションの Set オペレーションをすべて提供し、null 要素を許容します。HashSet と同じく、ハッシュ関数が複数のバケットで適切に要素を分散すると仮定して、基本のオペレーション (add、contains、および remove) に一定時間のパフォーマンスを提供します。パフォーマンスは、1 つの例外を除いて、リンクリストを保持する負担増により、HashSet のパフォーマンスより少し劣る場合があります。LinkedHashSet の繰り返しには、容量にかかわらず、セットの「サイズ」に比例した時間が必要になります。HashSet の「容量」に比例した時間を必要とするので、HashSet の繰り返しは、いっそう高くつくおそれがあります。
リンクハッシュセットには、パフォーマンスに影響を及ぼすパラメータが 2 つあります。「初期容量」と「負荷係数」です。これらのパラメータは、HashSet について正確に定義されています。ただし、このクラスの繰り返し回数は容量により影響を受けないので、初期容量に非常に高い値を選んでも、このクラスでは HashSet に比べてそれほど結果はひどくはありません。
この実装は同期化されません。複数のスレッドが並行してリンクハッシュセットにアクセスし、それらのスレッドの少なくとも 1 つが構造的にセットを変更する場合には、外部で同期をとる必要があります。通常、構造的な変更は、セットを自然にカプセル化する特定のオブジェクトで同期をとることによって達成されます。
この種のオブジェクトがない場合には、Collections.synchronizedSet
メソッドを使用してセットを「ラップ」する必要があります。これは、セットへの偶発的な非同期アクセスを防ぐために、作成時に行うのが最適です。
Set s = Collections.synchronizedSet(new LinkedHashSet(...));
このクラスの iterator メソッドによって返される反復子は「フェイルファスト」です。反復子の作成後に、反復子自体の remove メソッド以外の方法でセットが変更されると、反復子は ConcurrentModificationException
をスローします。このように、並行して変更が行われると、反復子は、将来の予測できない時点において予測できない動作が発生する危険を回避するために、ただちにかつ手際よく例外をスローします。
通常、非同期の並行変更がある場合、確かな保証を行うことは不可能なので、反復子のフェイルファストの動作を保証することはできません。フェイルファスト反復子は最善努力原則に基づき、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)
指定された初期容量と負荷係数で新しい空のリンクハッシュセットを生成します。 |
メソッドの概要 |
---|
クラス java.util.HashSet から継承されたメソッド |
---|
add, clear, clone, contains, isEmpty, iterator, remove, size |
クラス java.util.AbstractSet から継承されたメソッド |
---|
equals, hashCode, removeAll |
クラス java.util.AbstractCollection から継承されたメソッド |
---|
addAll, containsAll, retainAll, toArray, toArray, toString |
クラス java.lang.Object から継承されたメソッド |
---|
finalize, getClass, notify, notifyAll, wait, wait, wait |
インタフェース java.util.Set から継承されたメソッド |
---|
add, addAll, clear, contains, containsAll, equals, hashCode, isEmpty, iterator, remove, removeAll, retainAll, size, toArray, toArray |
コンストラクタの詳細 |
---|
public LinkedHashSet(int initialCapacity, float loadFactor)
initialCapacity
- リンクハッシュセットの初期容量loadFactor
- リンクハッシュセットの負荷係数
IllegalArgumentException
- 初期容量がゼロより小さい場合、または負荷係数が正でない場合public LinkedHashSet(int initialCapacity)
initialCapacity
- LinkedHashSet の初期容量
IllegalArgumentException
- 初期容量が 0 より小さい場合public LinkedHashSet()
public LinkedHashSet(Collection<? extends E> c)
c
- 要素がセットに配置されるコレクション
NullPointerException
- 指定されたコレクションが null である場合
|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。