|
|||||||||
| Home >> All >> org >> ematgine >> utils >> [ concurrent overview ] | PREV CLASS NEXT CLASS | ||||||||
SUMMARY: JAVADOC | SOURCE | DOWNLOAD | NESTED | FIELD | CONSTR | METHOD |
DETAIL: FIELD | CONSTR | METHOD | ||||||||
org.ematgine.utils.concurrent
Class CopyOnWriteArraySet

java.lang.Objectjava.util.AbstractCollection
java.util.AbstractSet
org.ematgine.utils.concurrent.CopyOnWriteArraySet
- All Implemented Interfaces:
- java.lang.Cloneable, java.util.Collection, java.lang.Iterable, java.io.Serializable, java.util.Set
- public class CopyOnWriteArraySet
- extends java.util.AbstractSet
- implements java.lang.Cloneable, java.io.Serializable
- extends java.util.AbstractSet
This class implements a java.util.Set that uses a 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.
- Mutative operations(add, set, remove, etc) are fairly expensive since they usually entail copying the entire underlying array.
- Loops involving repeated element-by-element mutative operations are so expensive that they should generally be avoided.
- Iterators do not support the mutative remove operation
- Traversal via iterators is very fast and cannot ever encounter interference from other threads. Iterators rely on unchanging snapshots of the array at the time the iterators were constructed
Sample Usage. Probably the main application of copy-on-write sets are classes that maintain sets of Handler objects that must be multicasted to upon an update command. This is a classic case where you do not want to be holding a synch lock while sending a message, and where traversals normally vastly overwhelm additions.
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();
Iterator it = handlers.iterator();
while (it.hasNext())
((Handler)(it.next()).handle();
}
}
[ Introduction to this package. ]
| Field Summary | |
protected CopyOnWriteArrayList |
al
|
| Constructor Summary | |
CopyOnWriteArraySet()
Constructs an empty set |
|
CopyOnWriteArraySet(java.util.Collection c)
Constructs a set containing all of the elements of the specified Collection. |
|
| Method Summary | |
boolean |
add(java.lang.Object o)
Adds the specified element to the set if it is not already present (optional operation). |
boolean |
addAll(java.util.Collection c)
Adds all of the elements of the given collection to this set (optional operation). |
void |
clear()
Removes all elements from this set (optional operation). |
boolean |
contains(java.lang.Object o)
Returns true if the set contains the specified element. |
boolean |
containsAll(java.util.Collection c)
Returns true if this set contains all elements in the specified collection. |
boolean |
isEmpty()
Returns true if the set contains no elements. |
java.util.Iterator |
iterator()
Returns an iterator over the set. |
boolean |
remove(java.lang.Object o)
Removes the specified element from this set (optional operation). |
boolean |
removeAll(java.util.Collection c)
Removes from this set all elements in the given collection (optional operation). |
boolean |
retainAll(java.util.Collection c)
Retains only the elements in this set that are also in the specified collection (optional operation). |
int |
size()
Returns the number of elements in the set. |
java.lang.Object[] |
toArray()
Returns an array containing the elements of this set. |
java.lang.Object[] |
toArray(java.lang.Object[] a)
Returns an array containing the elements of this set, of the same runtime type of the argument. |
| 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 |
| Field Detail |
al
protected final CopyOnWriteArrayList al
| Constructor Detail |
CopyOnWriteArraySet
public CopyOnWriteArraySet()
- Constructs an empty set
CopyOnWriteArraySet
public CopyOnWriteArraySet(java.util.Collection c)
- Constructs a set containing all of the elements of the specified
Collection.
| Method Detail |
size
public int size()
- Description copied from interface:
java.util.Set - Returns the number of elements in the set. If there are more
than Integer.MAX_VALUE mappings, return Integer.MAX_VALUE. This is
the cardinality of the set.
- Specified by:
sizein interfacejava.util.Set
isEmpty
public boolean isEmpty()
- Description copied from interface:
java.util.Set - Returns true if the set contains no elements.
- Specified by:
isEmptyin interfacejava.util.Set
contains
public boolean contains(java.lang.Object o)
- Description copied from interface:
java.util.Set - Returns true if the set contains the specified element. In other words,
this looks for
o == null ? e == null : o.equals(e).- Specified by:
containsin interfacejava.util.Set
toArray
public java.lang.Object[] toArray()
- Description copied from interface:
java.util.Set - Returns an array containing the elements of this set. If the set
makes a guarantee about iteration order, the array has the same
order. The array is distinct from the set; modifying one does not
affect the other.
- Specified by:
toArrayin interfacejava.util.Set
toArray
public java.lang.Object[] toArray(java.lang.Object[] a)
- Description copied from interface:
java.util.Set - Returns an array containing the elements of this set, of the same runtime
type of the argument. If the given set is large enough, it is reused,
and null is inserted in the first unused slot. Otherwise, reflection
is used to build a new array. If the set makes a guarantee about iteration
order, the array has the same order. The array is distinct from the set;
modifying one does not affect the other.
- Specified by:
toArrayin interfacejava.util.Set
clear
public void clear()
- Description copied from interface:
java.util.Set - Removes all elements from this set (optional operation). This set will
be empty afterwords, unless an exception occurs.
- Specified by:
clearin interfacejava.util.Set
iterator
public java.util.Iterator iterator()
- Description copied from interface:
java.util.Set - Returns an iterator over the set. The iterator has no specific order,
unless further specified.
- Specified by:
iteratorin interfacejava.util.Set
remove
public boolean remove(java.lang.Object o)
- Description copied from interface:
java.util.Set - Removes the specified element from this set (optional operation). If
an element e exists,
o == null ? e == null : o.equals(e), it is removed from the set.- Specified by:
removein interfacejava.util.Set
containsAll
public boolean containsAll(java.util.Collection c)
- Description copied from interface:
java.util.Set - Returns true if this set contains all elements in the specified
collection. If the argument is also a set, this is the subset
relationship.
- Specified by:
containsAllin interfacejava.util.Set
addAll
public boolean addAll(java.util.Collection c)
- Description copied from interface:
java.util.Set - Adds all of the elements of the given collection to this set (optional
operation). If the argument is also a Set, this returns the mathematical
union of the two. The behavior is unspecified if the set is
modified while this is taking place.
- Specified by:
addAllin interfacejava.util.Set
removeAll
public boolean removeAll(java.util.Collection c)
- Description copied from class:
java.util.AbstractSet - Removes from this set all elements in the given collection (optional
operation). This implementation uses
size()to determine the smaller collection. Then, if this set is smaller, it iterates over the set, calling Iterator.remove if the collection contains the element. If this set is larger, it iterates over the collection, calling Set.remove for all elements in the collection. Note that this operation will fail if a remove methods is not supported.- Specified by:
removeAllin interfacejava.util.Set
retainAll
public boolean retainAll(java.util.Collection c)
- Description copied from interface:
java.util.Set - Retains only the elements in this set that are also in the specified
collection (optional operation). If the argument is also a set, this
performs the intersection of the two sets.
- Specified by:
retainAllin interfacejava.util.Set
add
public boolean add(java.lang.Object o)
- Description copied from interface:
java.util.Set - Adds the specified element to the set if it is not already present
(optional operation). In particular, the comparison algorithm is
o == null ? e == null : o.equals(e). Sets need not permit all values, and may document what exceptions will be thrown if a value is not permitted.- Specified by:
addin interfacejava.util.Set
|
|||||||||
| Home >> All >> org >> ematgine >> utils >> [ concurrent overview ] | PREV CLASS NEXT CLASS | ||||||||
SUMMARY: JAVADOC | SOURCE | DOWNLOAD | NESTED | FIELD | CONSTR | METHOD |
DETAIL: FIELD | CONSTR | METHOD | ||||||||
JAVADOC