net.kano.joscar
Class CopyOnWriteArraySet

java.lang.Object
  extended byjava.util.AbstractCollection
      extended byjava.util.AbstractSet
          extended bynet.kano.joscar.CopyOnWriteArraySet
All Implemented Interfaces:
java.lang.Cloneable, java.util.Collection, java.io.Serializable, 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
 
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()
Specified by:
size in interface java.util.Set

isEmpty

public boolean isEmpty()
Specified by:
isEmpty in interface java.util.Set

contains

public boolean contains(java.lang.Object o)
Specified by:
contains in interface java.util.Set

toArray

public java.lang.Object[] toArray()
Specified by:
toArray in interface java.util.Set

toArray

public java.lang.Object[] toArray(java.lang.Object[] a)
Specified by:
toArray in interface java.util.Set

clear

public void clear()
Specified by:
clear in interface java.util.Set

iterator

public java.util.Iterator iterator()
Specified by:
iterator in interface java.util.Set

remove

public boolean remove(java.lang.Object o)
Specified by:
remove in interface java.util.Set

containsAll

public boolean containsAll(java.util.Collection c)
Specified by:
containsAll in interface java.util.Set

addAll

public boolean addAll(java.util.Collection c)
Specified by:
addAll in interface java.util.Set

removeAll

public boolean removeAll(java.util.Collection c)
Specified by:
removeAll in interface java.util.Set

retainAll

public boolean retainAll(java.util.Collection c)
Specified by:
retainAll in interface java.util.Set

add

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