- java.lang.Object
-
- java.util.AbstractCollection<E>
-
- java.util.AbstractSet<E>
-
- java.util.concurrent.CopyOnWriteArraySet<E>
-
- Type Parameters:
E- the type of elements held in this set
- All Implemented Interfaces:
Serializable,Iterable<E>,Collection<E>,Set<E>
public class CopyOnWriteArraySet<E> extends AbstractSet<E> implements Serializable
ASetthat uses an internalCopyOnWriteArrayListfor all of its operations. Thus, it shares the same basic properties:- It is best suited for applications in which set sizes generally stay small, read-only operations vastly outnumber mutative operations, and you need to prevent interference among threads during traversal.
- It is thread-safe.
- Mutative operations (
add,set,remove, etc.) are expensive since they usually entail copying the entire underlying array. - Iterators do not support the mutative
removeoperation. - Traversal via iterators is fast and cannot encounter interference from other threads. Iterators rely on unchanging snapshots of the array at the time the iterators were constructed.
Sample Usage. The following code sketch uses a copy-on-write set to maintain a set of Handler objects that perform some action upon state updates.
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(); } }This class is a member of the Java Collections Framework.
- Since:
- 1.5
- See Also:
CopyOnWriteArrayList, Serialized Form
-
-
Constructor Summary
Constructors Constructor Description CopyOnWriteArraySet()Creates an empty set.CopyOnWriteArraySet(Collection<? extends E> c)Creates a set containing all of the elements of the specified collection.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanadd(E e)Adds the specified element to this set if it is not already present.booleanaddAll(Collection<? extends E> c)Adds all of the elements in the specified collection to this set if they're not already present.voidclear()Removes all of the elements from this set.booleancontains(Object o)Returnstrueif this set contains the specified element.booleancontainsAll(Collection<?> c)Returnstrueif this set contains all of the elements of the specified collection.booleanequals(Object o)Compares the specified object with this set for equality.voidforEach(Consumer<? super E> action)Performs the given action for each element of theIterableuntil all elements have been processed or the action throws an exception.booleanisEmpty()Returnstrueif this set contains no elements.Iterator<E>iterator()Returns an iterator over the elements contained in this set in the order in which these elements were added.booleanremove(Object o)Removes the specified element from this set if it is present.booleanremoveAll(Collection<?> c)Removes from this set all of its elements that are contained in the specified collection.booleanremoveIf(Predicate<? super E> filter)Removes all of the elements of this collection that satisfy the given predicate.booleanretainAll(Collection<?> c)Retains only the elements in this set that are contained in the specified collection.intsize()Returns the number of elements in this set.Spliterator<E>spliterator()Returns aSpliteratorover the elements in this set in the order in which these elements were added.Object[]toArray()Returns an array containing all of the elements in this set.<T> T[]toArray(T[] a)Returns an array containing all of the elements in this set; the runtime type of the returned array is that of the specified array.-
Methods inherited from class java.util.AbstractCollection
toString
-
Methods inherited from class java.util.AbstractSet
hashCode
-
Methods inherited from interface java.util.Collection
parallelStream, stream
-
-
-
-
Constructor Detail
-
CopyOnWriteArraySet
public CopyOnWriteArraySet()
Creates an empty set.
-
CopyOnWriteArraySet
public CopyOnWriteArraySet(Collection<? extends E> c)
Creates a set containing all of the elements of the specified collection.- Parameters:
c- the collection of elements to initially contain- Throws:
NullPointerException- if the specified collection is null
-
-
Method Detail
-
size
public int size()
Returns the number of elements in this set.- Specified by:
sizein interfaceCollection<E>- Specified by:
sizein interfaceSet<E>- Specified by:
sizein classAbstractCollection<E>- Returns:
- the number of elements in this set
-
-