FileDocCategorySizeDatePackage
CopyOnWriteArraySet.javaAPI DocAndroid 1.5 API3862Wed May 06 22:41:02 BST 2009java.util.concurrent

CopyOnWriteArraySet

public class CopyOnWriteArraySet extends AbstractSet implements Serializable
A {@link java.util.Set} that uses {@link 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.
  • 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 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 lock while sending a message, and where traversals normally vastly overwhelm additions.

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();
Iterator it = handlers.iterator();
while (it.hasNext())
it.next().handle();
}
}
see
CopyOnWriteArrayList
since
1.5
author
Doug Lea
param
the type of elements held in this collection

Fields Summary
private static final long
serialVersionUID
private final CopyOnWriteArrayList
al
Constructors Summary
public CopyOnWriteArraySet()
Creates an empty set.


             
      
        al = new CopyOnWriteArrayList<E>();
    
public CopyOnWriteArraySet(Collection c)
Creates a set containing all of the elements of the specified Collection.

param
c the collection

        al = new CopyOnWriteArrayList<E>();
        al.addAllAbsent(c);
    
Methods Summary
public booleanadd(E o)

 return al.addIfAbsent(o); 
public booleanaddAll(java.util.Collection c)

 return al.addAllAbsent(c) > 0; 
public voidclear()

        al.clear(); 
public booleancontains(java.lang.Object o)

 return al.contains(o); 
public booleancontainsAll(java.util.Collection c)

 return al.containsAll(c); 
public booleanisEmpty()

 return al.isEmpty(); 
public java.util.Iteratoriterator()

 return al.iterator(); 
public booleanremove(java.lang.Object o)

 return al.remove(o); 
public booleanremoveAll(java.util.Collection c)

 return al.removeAll(c); 
public booleanretainAll(java.util.Collection c)

 return al.retainAll(c); 
public intsize()

 return al.size(); 
public java.lang.Object[]toArray()

 return al.toArray(); 
public T[]toArray(T[] a)

 return al.toArray(a);