クラスCopyOnWriteArraySet<E>
- 型パラメータ:
E- このセットで保持されている要素の型
- すべての実装されたインタフェース:
Serializable,Iterable<E>,Collection<E>,Set<E>
CopyOnWriteArrayListをすべてのオペレーションで使用するSetです。 このため、同じ基本プロパティが共有されます。
- 設定サイズが通常小さく、読取り専用操作が変更操作よりもはるかに多いアプリケーションに最適である。また、トラバーサル中にスレッド間の干渉を防ぐ必要がある。
- スレッド・セーフである。
- 推移的操作(
add、set、removeなど)は、通常、基になる配列全体のコピーが必要になるため、負荷が大きい。 - イテレータは、推移的
removeオペレーションをサポートしていない。 - イテレータを使用したトラバーサルは高速であり、ほかのスレッドからの干渉に遭遇することはない。 イテレータは、その構築された時点での変更されない配列スナップショットに依存する。
使用例 次のコード例では、copy-on-writeセットを使用して、状態の更新時に特定のアクションを実行する一連のHandlerオブジェクトを管理します。
class Handler { void handle() { ... } }
class X {
private final CopyOnWriteArraySet<Handler> handlers
= new CopyOnWriteArraySet<>();
public void addHandler(Handler h) { handlers.add(h); }
private long internalState;
private synchronized void changeState() { internalState = ...; }
public void update() {
changeState();
for (Handler handler : handlers)
handler.handle();
}
}
このクラスは、Java Collections Frameworkのメンバーです。
- 導入されたバージョン:
- 1.5
- 関連項目:
-
コンストラクタのサマリー
コンストラクタコンストラクタ説明空のセットを作成します。CopyOnWriteArraySet(Collection<? extends E> c) 指定されたコレクションの要素すべてを含むセットを作成します。 -
メソッドのサマリー
修飾子と型メソッド説明boolean指定された要素がセットの要素として存在しない場合に、その要素をセットに追加します。booleanaddAll(Collection<? extends E> c) 指定されたコレクションのすべての要素について、その要素がこのセット内にない場合、セットに追加します。voidclear()すべての要素をセットから削除します。boolean指定された要素がこのセットに含まれている場合にtrueを返します。booleancontainsAll(Collection<?> c) 指定されたコレクションのすべての要素がこのセットに含まれている場合にtrueを返します。boolean指定されたオブジェクトがセットと同じかどうかを比較します。voidIterableの各要素に対して指定されたアクションを、すべての要素が処理されるか、アクションが例外をスローするまで実行します。booleanisEmpty()このセットに要素が1つも含まれていない場合にtrueを返します。iterator()このセットに含まれる各要素についてのイテレータを、これらの要素が追加された順序で返します。boolean指定された要素がこのセットに存在する場合に、要素をセットから削除します。booleanremoveAll(Collection<?> c) セットから、指定されたコレクション内に保持されているすべての要素を削除します。boolean指定された述語(オプションの操作)を満たす、このコレクションのすべての要素を削除します。booleanretainAll(Collection<?> c) 指定されたコレクション内に保持されている、セット内の要素だけを保持します。intsize()このセット中の要素の数を返します。このセット内の要素に対するSpliteratorを、これらの要素が追加された順序で返します。Object[]toArray()セット内のすべての要素が格納されている配列を返します。<T> T[]toArray(T[] a) セット内のすべての要素を格納している配列を返します。返される配列の実行時の型は、指定された配列の型になります。クラスjava.util.AbstractSetで宣言されたメソッド
hashCodeクラスjava.util.AbstractCollectionで宣言されたメソッド
toStringインタフェースjava.util.Collectionで宣言されたメソッド
parallelStream, stream, toArray
-
コンストラクタの詳細
-
CopyOnWriteArraySet
public CopyOnWriteArraySet()空のセットを作成します。 -
CopyOnWriteArraySet
public CopyOnWriteArraySet(Collection<? extends E> c) 指定されたコレクションの要素すべてを含むセットを作成します。- パラメータ:
c- 初期状態で含む要素のコレクション- スロー:
NullPointerException- 指定されたコレクションがnullである場合
-
-
メソッドの詳細
-
size
-
isEmpty
public boolean isEmpty()このセットに要素が1つも含まれていない場合にtrueを返します。- 定義:
isEmpty、インタフェースCollection<E>- 定義:
isEmpty、インタフェースSet<E>- オーバーライド:
isEmpty、クラスAbstractCollection<E>- 戻り値:
- セットに要素がない場合は
true
-
contains
public boolean contains(Object o) 指定された要素がこのセットに含まれている場合にtrueを返します。 より正式には、このセットにObjects.equals(o, e)などの要素eが含まれている場合のみ、trueを返します。- 定義:
contains、インタフェースCollection<E>- 定義:
contains、インタフェースSet<E>- オーバーライド:
contains、クラスAbstractCollection<E>- パラメータ:
o- このセット内にあるかどうかが判定される要素- 戻り値:
- 指定された要素がこのセットに含まれている場合は
true
-
toArray
public Object[] toArray()セット内のすべての要素が格納されている配列を返します。 イテレータによって要素が返される順序をセットが保証する場合、このメソッドは同じ順序で要素を返さなければいけません。返される配列への参照をセットが維持しないという点で、この配列は安全です。 つまり、このメソッドは、セットが配列に連動している場合でも新しい配列を割り当てます。 このため、呼出し側は、返された配列を自由に変更できます。
このメソッドは、配列ベースのAPIとコレクションベースのAPIの間の橋渡し役として機能します。
- 定義:
toArray、インタフェースCollection<E>- 定義:
toArray、インタフェースSet<E>- オーバーライド:
toArray、クラスAbstractCollection<E>- 戻り値:
- セット内のすべての要素を保持している配列
-
toArray
public <T> T[] toArray(T[] a) セット内のすべての要素を格納している配列を返します。返される配列の実行時の型は、指定された配列の型になります。 セットが指定された配列に収まる場合は、その中に返されます。 そうでない場合は、指定された配列の実行時の型とセットのサイズを持つ新しい配列が割り当てられます。このセットが指定された配列に収まり、その配列にさらに余裕がある場合(つまり、配列がセットより多くの要素を持つ場合)、その配列内でセットの終端よりあとの要素は
nullに設定されます。 このセットにnull要素がないことを呼出し側が知っている場合にだけ、この特性を利用してこのセットの長さを判断できます。イテレータによって要素が返される順序をセットが保証する場合、このメソッドは同じ順序で要素を返さなければいけません。
toArray()メソッドと同じように、このメソッドは、配列ベースのAPIとコレクションベースのAPIの間の橋渡し役として機能します。 さらに、このメソッドでは出力配列の実行時の型を正確に制御できるため、環境によっては割当ての手間を抑えるために使用できます。xが、文字列だけからなるセットであることがわかっていると仮定します。 次のコードを使うと、新しく割り当てられたStringの配列内にセットをダンプできます。String[] y = x.toArray(new String[0]);toArray(new Object[0])は、機能の点でtoArray()と同一です。- 定義:
toArray、インタフェースCollection<E>- 定義:
toArray、インタフェースSet<E>- オーバーライド:
toArray、クラスAbstractCollection<E>- 型パラメータ:
T- コレクションを格納する配列のコンポーネント型- パラメータ:
a- 配列が十分な大きさを持つ場合は、このセットの要素の格納先の配列。配列のサイズが十分でない場合は、同じ実行時の型で新しい配列が格納用として割り当てられる。- 戻り値:
- セット内のすべての要素を保持している配列
- スロー:
ArrayStoreException- 指定された配列の実行時の型が、このセット内のすべての要素の実行時の型のスーパー・タイプでない場合NullPointerException- 指定された配列がnullである場合
-
clear
public void clear()すべての要素をセットから削除します。 この呼出しが戻ると、セットは空になります。- 定義:
clear、インタフェースCollection<E>- 定義:
clear、インタフェースSet<E>- オーバーライド:
clear、クラスAbstractCollection<E>
-
remove
public boolean remove(Object o) 指定された要素がこのセットに存在する場合に、要素をセットから削除します。 さらに正式には、要素eを削除して、このセットにそのような要素が含まれている場合は、Objects.equals(o, e)を削除します。 その要素がこのセットに含まれていた場合、つまり、呼出しの結果としてこのセットが変更された場合はtrueを返します。 呼出しが復帰したあとは、このセットはその要素を持っていません。- 定義:
remove、インタフェースCollection<E>- 定義:
remove、インタフェースSet<E>- オーバーライド:
remove、クラスAbstractCollection<E>- パラメータ:
o- このセットから削除されるオブジェクト(そのオブジェクトが存在する場合)- 戻り値:
- 指定された要素がこのセットに含まれていた場合は
true
-
add
public boolean add(E e) 指定された要素がセットの要素として存在しない場合に、その要素をセットに追加します。 より正式には、Objects.equals(e, e2)などの要素e2がセットに含まれていない場合に、指定された要素eをこのセットに追加します。 このセット内にすでにその要素が含まれている場合、この呼出しはセットを変更せずにfalseを返します。- 定義:
add、インタフェースCollection<E>- 定義:
add、インタフェースSet<E>- オーバーライド:
add、クラスAbstractCollection<E>- パラメータ:
e- このセットに追加される要素- 戻り値:
- このセット内に、指定された要素がなかった場合は
true
-
containsAll
public boolean containsAll(Collection<?> c) 指定されたコレクションのすべての要素がこのセットに含まれている場合にtrueを返します。 指定されたコレクションもセットである場合、指定されたセットがこのセットのサブセットであれば、このメソッドはtrueを返します。- 定義:
containsAll、インタフェースCollection<E>- 定義:
containsAll、インタフェースSet<E>- オーバーライド:
containsAll、クラスAbstractCollection<E>- パラメータ:
c- このセットに含まれているかどうかがチェックされるコレクション- 戻り値:
- 指定されたコレクションのすべての要素がこのセットに含まれている場合は
true - スロー:
NullPointerException- 指定されたコレクションがnullである場合- 関連項目:
-
addAll
public boolean addAll(Collection<? extends E> c) 指定されたコレクションのすべての要素について、その要素がこのセット内にない場合、セットに追加します。 指定されたコレクションもセットである場合、addAllオペレーションは、その値が2つのセットの和集合になるようにこのセットを効率的に変更します。 オペレーションの進行中に、指定されたコレクションが変更された場合の、このオペレーションの動作は定義されていません。- 定義:
addAll、インタフェースCollection<E>- 定義:
addAll、インタフェースSet<E>- オーバーライド:
addAll、クラスAbstractCollection<E>- パラメータ:
c- このセットに追加される要素を含むコレクション- 戻り値:
- 呼出しの結果としてこのセットが変更された場合は
true - スロー:
NullPointerException- 指定されたコレクションがnullである場合- 関連項目:
-
removeAll
public boolean removeAll(Collection<?> c) セットから、指定されたコレクション内に保持されているすべての要素を削除します。 指定されたコレクションもセットである場合、このオペレーションは、その値が2つのセットの非対称集合差分になるようにこのセットを効率的に変更します。- 定義:
removeAll、インタフェースCollection<E>- 定義:
removeAll、インタフェースSet<E>- オーバーライド:
removeAll、クラスAbstractSet<E>- パラメータ:
c- このセットから削除される要素を含むコレクション- 戻り値:
- 呼出しの結果としてこのセットが変更された場合は
true - スロー:
ClassCastException- このセットのある要素のクラスが、指定されたコレクションと互換でない場合(オプション)NullPointerException- このセットにnull要素が含まれており、指定されたコレクションがnull要素を許可しない場合(オプション)、または指定されたコレクションがnullの場合- 関連項目:
-
retainAll
public boolean retainAll(Collection<?> c) 指定されたコレクション内に保持されている、セット内の要素だけを保持します。 つまり、セットから、指定されたコレクション内にない要素をすべて削除します。 指定されたコレクションもセットである場合、このオペレーションは、その値が2つのセットの共通部分になるようにこのセットを効率的に変更します。- 定義:
retainAll、インタフェースCollection<E>- 定義:
retainAll、インタフェースSet<E>- オーバーライド:
retainAll、クラスAbstractCollection<E>- パラメータ:
c- このセットで保持される要素を含むコレクション- 戻り値:
- 呼出しの結果としてこのセットが変更された場合は
true - スロー:
ClassCastException- このセットのある要素のクラスが、指定されたコレクションと互換でない場合(オプション)NullPointerException- このセットにnull要素が含まれており、指定されたコレクションがnull要素を許可しない場合(オプション)、または指定されたコレクションがnullの場合- 関連項目:
-
iterator
このセットに含まれる各要素についてのイテレータを、これらの要素が追加された順序で返します。返されるイテレータは、イテレータの構築時のセット状態のスナップショットを提供します。 イテレータのトラバーサル中に同期化は必要ありません。 イテレータは、removeメソッドをサポート
しません。 -
equals
public boolean equals(Object o) 指定されたオブジェクトがセットと同じかどうかを比較します。 指定されたオブジェクトがこのオブジェクトと同じオブジェクトである場合、またはそれがSetでもあり、指定されたセットでiteratorによって返された要素が、このセットでイテレータによって返された要素と同じである場合はtrueを返します。 より正式には、2つのイテレータは、同じ数の要素を返し、指定されたセットに対してイテレータから戻されたすべての要素e1に対して、Objects.equals(e1, e2)のように、このセットに対してイテレータから戻された要素e2が戻されるとみなされます。- 定義:
equals、インタフェースCollection<E>- 定義:
equals、インタフェースSet<E>- オーバーライド:
equals、クラスAbstractSet<E>- パラメータ:
o- このセットと等しいかどうかが比較されるオブジェクト- 戻り値:
- 指定されたオブジェクトがこのセットに等しい場合は
true - 関連項目:
-
removeIf
次のインタフェースからコピーされた説明:Collection指定された述語(オプションの操作)を満たす、このコレクションのすべての要素を削除します。 反復中に、または述語によってスローされたエラーまたは実行時例外は、呼出し側に中継されます。- 定義:
removeIf、インタフェースCollection<E>- パラメータ:
filter- 削除される要素に対してtrueを返す述語- 戻り値:
- 要素が削除された場合は
true - スロー:
NullPointerException- 指定されたフィルタがnullである場合
-
forEach
インタフェースからコピーされた説明:IterableIterableの各要素に対して指定されたアクションを、すべての要素が処理されるか、アクションが例外をスローするまで実行します。 反復の順序でアクションが実行されます(その順序が指定されている場合)。 アクションによってスローされた例外は、呼出し側に中継されます。このメソッドの動作は、オーバーライドするクラスが同時変更ポリシーを指定していないかぎり、要素の基礎となるソースを変更する副作用をアクションが実行する場合には指定されません。
- 定義:
forEach、インタフェースIterable<E>- パラメータ:
action- 各要素に対して実行されるアクション- スロー:
NullPointerException- 指定されたアクションがnullである場合
-
spliterator
public Spliterator<E> spliterator()このセット内の要素に対するSpliteratorを、これらの要素が追加された順序で返します。Spliteratorは、Spliterator.IMMUTABLE、Spliterator.DISTINCT、Spliterator.SIZEDおよびSpliterator.SUBSIZEDを報告します。スプリッテレータは、スプリッテレータが構築されたときのセット状態のスナップショットを提供します。 スプリッテレータの操作中に同期化は必要ありません。
- 定義:
spliterator、インタフェースCollection<E>- 定義:
spliterator、インタフェースIterable<E>- 定義:
spliterator、インタフェースSet<E>- 戻り値:
- このセット内の要素に対する
Spliterator - 導入されたバージョン:
- 1.8
-