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のメンバーです。
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)
指定された初期容量と負荷係数で新しい空のリンク・ハッシュ・セットを構築します。
|
修飾子と型 | メソッドと説明 |
---|---|
Spliterator<E> |
spliterator()
このセット内の要素に対する遅延バインディングおよびフェイルファスト
Spliterator を作成します。 |
equals, hashCode, removeAll
addAll, containsAll, retainAll, toArray, toArray, toString
add, addAll, clear, contains, containsAll, equals, hashCode, isEmpty, iterator, remove, removeAll, retainAll, size, toArray, toArray
parallelStream, removeIf, stream
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である場合public Spliterator<E> spliterator()
Spliterator
を作成します。
Spliterator
は、Spliterator.SIZED
、Spliterator.DISTINCT
およびORDERED
を報告します。実装は、追加の特性値の報告をドキュメント化する必要があります。
spliterator
、インタフェース: Iterable<E>
spliterator
、インタフェース: Collection<E>
spliterator
、インタフェース: Set<E>
spliterator
、クラス: HashSet<E>
Iterator
から遅延バインディング・スプリッテレータを作成します。スプリッテレータは、セットのイテレータのフェイルファスト・プロパティを継承します。作成されたSpliterator
は、追加でSpliterator.SUBSIZED
を報告します。Spliterator
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2020, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyも参照してください。