EDU.oswego.cs.dl.util.concurrent
Class CopyOnWriteArraySet

java.lang.Object
  extended by java.util.AbstractCollection<E>
      extended by java.util.AbstractSet
          extended by EDU.oswego.cs.dl.util.concurrent.CopyOnWriteArraySet
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, java.lang.Iterable, java.util.Collection, java.util.Set

public class CopyOnWriteArraySet
extends java.util.AbstractSet
implements java.lang.Cloneable, java.io.Serializable

This class implements a java.util.Set that uses a CopyOnWriteArrayList for all of its operations. Thus, it shares the same basic properties:

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. ]

See Also:
CopyOnWriteArrayList, Serialized Form

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)
           
 boolean addAll(java.util.Collection c)
           
 void clear()
           
 boolean contains(java.lang.Object o)
           
 boolean containsAll(java.util.Collection c)
           
 boolean isEmpty()
           
 java.util.Iterator iterator()
           
 boolean remove(java.lang.Object o)
           
 boolean removeAll(java.util.Collection c)
           
 boolean retainAll(java.util.Collection c)
           
 int size()
           
 java.lang.Object[] toArray()
           
 java.lang.Object[] toArray(java.lang.Object[] a)
           
 
Methods inherited from class java.util.AbstractSet
equals, hashCode, removeAll
 
Methods inherited from class java.util.AbstractCollection
addAll, containsAll, retainAll, toArray, toString
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface java.util.Set
addAll, containsAll, retainAll, toArray
 

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()
Specified by:
size in interface java.util.Collection
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.Collection
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.Collection
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.Collection
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)
Overrides:
toArray in class java.util.AbstractCollection

clear

public void clear()
Specified by:
clear in interface java.util.Collection
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.lang.Iterable
Specified by:
iterator in interface java.util.Collection
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.Collection
Specified by:
remove in interface java.util.Set
Overrides:
remove in class java.util.AbstractCollection

containsAll

public boolean containsAll(java.util.Collection c)
Overrides:
containsAll in class java.util.AbstractCollection

addAll

public boolean addAll(java.util.Collection c)
Overrides:
addAll in class java.util.AbstractCollection

removeAll

public boolean removeAll(java.util.Collection c)
Overrides:
removeAll in class java.util.AbstractSet

retainAll

public boolean retainAll(java.util.Collection c)
Overrides:
retainAll in class java.util.AbstractCollection

add

public boolean add(java.lang.Object o)
Specified by:
add in interface java.util.Collection
Specified by:
add in interface java.util.Set
Overrides:
add in class java.util.AbstractCollection