edu.emory.mathcs.util.concurrent
Class CopyOnWriteArraySet
java.lang.Object
|
+--java.util.AbstractCollection
|
+--java.util.AbstractSet
|
+--edu.emory.mathcs.util.concurrent.CopyOnWriteArraySet
- All Implemented Interfaces:
- java.util.Collection, java.io.Serializable, java.util.Set
- public class CopyOnWriteArraySet
- extends java.util.AbstractSet
- implements java.io.Serializable
A Set
that uses java.util.concurrent.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 (add, set, remove, etc) are expensive
since they usually entail copying the entire underlying array.
- Iterators do not support the mutative 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.
class Handler { void handle(); ... }
class X {
private final CopyOnWriteArraySet<Handler> handlers = new CopyOnWriteArraySet<Handler>();
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
Methods inherited from class java.util.AbstractSet |
equals, hashCode |
Methods inherited from class java.util.AbstractCollection |
toString |
Methods inherited from class java.lang.Object |
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
CopyOnWriteArraySet
public CopyOnWriteArraySet()
- Creates an empty set.
CopyOnWriteArraySet
public CopyOnWriteArraySet(java.util.Collection c)
- Creates a set containing all of the elements of the specified
Collection.
- Parameters:
c
- the collection
size
public int size()
- Specified by:
size
in interface java.util.Set
- Specified by:
size
in class java.util.AbstractCollection
isEmpty
public boolean isEmpty()
- Specified by:
isEmpty
in interface java.util.Set
- Overrides:
isEmpty
in class java.util.AbstractCollection
contains
public boolean contains(java.lang.Object o)
- Specified by:
contains
in interface java.util.Set
- Overrides:
contains
in class java.util.AbstractCollection
toArray
public java.lang.Object[] toArray()
- Specified by:
toArray
in interface java.util.Set
- Overrides:
toArray
in class java.util.AbstractCollection
toArray
public java.lang.Object[] toArray(java.lang.Object[] a)
- Specified by:
toArray
in interface java.util.Set
- Overrides:
toArray
in class java.util.AbstractCollection
clear
public void clear()
- Specified by:
clear
in interface java.util.Set
- Overrides:
clear
in class java.util.AbstractCollection
iterator
public java.util.Iterator iterator()
- Specified by:
iterator
in interface java.util.Set
- Specified by:
iterator
in class java.util.AbstractCollection
remove
public boolean remove(java.lang.Object o)
- Specified by:
remove
in interface java.util.Set
- Overrides:
remove
in class java.util.AbstractCollection
add
public boolean add(java.lang.Object o)
- Specified by:
add
in interface java.util.Set
- Overrides:
add
in class java.util.AbstractCollection
containsAll
public boolean containsAll(java.util.Collection c)
- Specified by:
containsAll
in interface java.util.Set
- Overrides:
containsAll
in class java.util.AbstractCollection
addAll
public boolean addAll(java.util.Collection c)
- Specified by:
addAll
in interface java.util.Set
- Overrides:
addAll
in class java.util.AbstractCollection
removeAll
public boolean removeAll(java.util.Collection c)
- Specified by:
removeAll
in interface java.util.Set
- Overrides:
removeAll
in class java.util.AbstractSet
retainAll
public boolean retainAll(java.util.Collection c)
- Specified by:
retainAll
in interface java.util.Set
- Overrides:
retainAll
in class java.util.AbstractCollection