- 型パラメータ:
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
指定された要素がセットの要素として存在しない場合に、その要素をセットに追加します。boolean
addAll
(Collection<? extends E> c) 指定されたコレクションのすべての要素について、その要素がこのセット内にない場合、セットに追加します。void
clear()
すべての要素をセットから削除します。boolean
指定された要素がセットに含まれている場合にtrue
を返します。boolean
containsAll
(Collection<?> c) 指定されたコレクションのすべての要素がこのセットに含まれている場合にtrue
を返します。boolean
指定されたオブジェクトがセットと同じかどうかを比較します。void
Iterable
の各要素に対して指定されたアクションを、すべての要素が処理されるか、アクションが例外をスローするまで実行します。boolean
isEmpty()
このセットに要素が1つも含まれていない場合にtrue
を返します。iterator()
このセットに含まれる各要素についてのイテレータを、これらの要素が追加された順序で返します。boolean
指定された要素がこのセットに存在する場合に、要素をセットから削除します。boolean
removeAll
(Collection<?> c) セットから、指定されたコレクション内に保持されているすべての要素を削除します。boolean
指定された述語を満たすこのコレクションの要素をすべて削除します。boolean
retainAll
(Collection<?> c) 指定されたコレクション内に保持されている、セット内の要素だけを保持します。int
size()
このセット中の要素の数を返します。このセット内の要素に対する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
public int size()このセット中の要素の数を返します。 -
isEmpty
public boolean isEmpty()このセットに要素が1つも含まれていない場合にtrue
を返します。- 定義:
isEmpty
、インタフェースCollection<E>
- 定義:
isEmpty
、インタフェースSet<E>
- オーバーライド:
isEmpty
、クラスAbstractCollection<E>
- 戻り値:
- このセットに要素が1つも含まれていない場合は
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) 指定された要素がこのセットに存在する場合に、要素をセットから削除します。 より正式には、Objects.equals(o, e)
(このセットにこのような要素が含まれている場合)のような要素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
インタフェースからコピーされた説明:Iterable
Iterable
の各要素に対して指定されたアクションを、すべての要素が処理されるか、アクションが例外をスローするまで実行します。 反復の順序でアクションが実行されます(その順序が指定されている場合)。 アクションによってスローされた例外は、呼出し側に中継されます。オーバーライドするクラスが並行変更ポリシーを指定していない限り、アクションが要素の基本ソースを変更する副作用を実行する場合、このメソッドの動作は指定されていません。
- 定義:
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
-