A {@link java.util.Set} that uses an internal {@link CopyOnWriteArrayList}for 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 ( {@code add}, {@code set}, {@code remove}, etc.) are expensive since they usually entail copying the entire underlying array.
- Iterators do not support the mutative {@code remove} operation.
- 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.
{@code}class Handler void handle(); ... } class X { private final CopyOnWriteArraySet 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.
@see CopyOnWriteArrayList
@since 1.5
@author Doug Lea
@param < E> the type of elements held in this collection