JavaTM Platform
Standard Ed. 6

java.util
クラス LinkedHashSet<E>

java.lang.Object
  上位を拡張 java.util.AbstractCollection<E>
      上位を拡張 java.util.AbstractSet<E>
          上位を拡張 java.util.HashSet<E>
              上位を拡張 java.util.LinkedHashSet<E>
型パラメータ:
E - このセットが保持する要素の型
すべての実装されたインタフェース:
Serializable, Cloneable, Iterable<E>, Collection<E>, Set<E>

public class LinkedHashSet<E>
extends HashSet<E>
implements Set<E>, Cloneable, Serializable

 

予測可能な繰り返し順序を持つ 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 と同じく、ハッシュ関数が複数のバケットで適切に要素を分散すると仮定して、基本のオペレーション (addcontains、および 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 のメンバーです。

導入されたバージョン:
1.4
関連項目:
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
 

コンストラクタの詳細

LinkedHashSet

public LinkedHashSet(int initialCapacity,
                     float loadFactor)
指定された初期容量と負荷係数で新しい空のリンクハッシュセットを生成します。

パラメータ:
initialCapacity - リンクハッシュセットの初期容量
loadFactor - リンクハッシュセットの負荷係数
例外:
IllegalArgumentException - 初期容量がゼロより小さい場合、または負荷係数が正でない場合

LinkedHashSet

public LinkedHashSet(int initialCapacity)
指定された初期容量とデフォルトの負荷係数 (0.75) で新しい空のリンクハッシュセットを生成します。

パラメータ:
initialCapacity - LinkedHashSet の初期容量
例外:
IllegalArgumentException - 初期容量が 0 より小さい場合

LinkedHashSet

public LinkedHashSet()
デフォルトの初期容量 (16) と負荷係数 (0.75) で新しい空のリンクハッシュセットを生成します。


LinkedHashSet

public LinkedHashSet(Collection<? extends E> c)
指定されたコレクションと同じ要素により新しいリンクハッシュセットを生成します。指定されたコレクションとデフォルトの負荷係数 (0.75) で要素を保持するのに十分な初期容量により、リンクハッシュセットが作成されます。

パラメータ:
c - 要素がセットに配置されるコレクション
例外:
NullPointerException - 指定されたコレクションが null である場合

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。