Build 1.0_r1(from source)

java.util.concurrent
Class CopyOnWriteArraySet<E>

java.lang.Object
  extended by java.util.AbstractCollection<E>
      extended by java.util.AbstractSet<E>
          extended by java.util.concurrent.CopyOnWriteArraySet<E>
Type Parameters:
E - the type of elements held in this collection
All Implemented Interfaces:
Serializable, Iterable<E>, Collection<E>, Set<E>

public class CopyOnWriteArraySet<E>
extends AbstractSet<E>
implements Serializable

A Set that uses 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 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();
    }
 }
 

Since:
1.5
See Also:
CopyOnWriteArrayList, Serialized Form

Constructor Summary
CopyOnWriteArraySet()
          Creates an empty set.
CopyOnWriteArraySet(Collection<? extends E> c)
          Creates a set containing all of the elements of the specified Collection.
 
Method Summary
 boolean add(E o)
          If the specified element is not contained within this collection, and addition of this element succeeds, then true will be returned.
 boolean addAll(Collection<? extends E> c)
          Adds the objects in the specified Collection to this Collection.
 void clear()
          Removes all the elements in this collection.
 boolean contains(Object o)
          Searches this Collection for the specified object.
 boolean containsAll(Collection<?> c)
          Searches this Collection for all objects in the specified Collection.
 boolean isEmpty()
          Returns true if the collection has no element, otherwise false.
 Iterator<E> iterator()
          Returns an Iterator on the elements of this Collection.
 boolean remove(Object o)
          Removes the first occurrence of the specified object from this Collection.
 boolean removeAll(Collection<?> c)
          Removes all occurrences in this Collection of each object in the specified Collection.
 boolean retainAll(Collection<?> c)
          Removes all objects from this Collection that are not contained in the specified Collection.
 int size()
          Returns the number of elements in this Collection.
 Object[] toArray()
          Returns a new array containing all elements contained in this Collection.
<T> T[]
toArray(T[] a)
          Returns an array containing all elements contained in this Collection.
 
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
 

Constructor Detail

CopyOnWriteArraySet

public CopyOnWriteArraySet()
Creates an empty set.


CopyOnWriteArraySet

public CopyOnWriteArraySet(Collection<? extends E> c)
Creates a set containing all of the elements of the specified Collection.

Parameters:
c - the collection
Method Detail

size

public int size()
Description copied from class: AbstractCollection
Returns the number of elements in this Collection.

Specified by:
size in interface Collection<E>
Specified by:
size in interface Set<E>
Specified by:
size in class AbstractCollection<E>
Returns:
the number of elements in this Collection

isEmpty

public boolean isEmpty()
Description copied from class: AbstractCollection
Returns true if the collection has no element, otherwise false.

Specified by:
isEmpty in interface Collection<E>
Specified by:
isEmpty in interface Set<E>
Overrides:
isEmpty in class AbstractCollection<E>
Returns:
true if the collection has no element.
See Also:
Collection.size()

contains

public boolean contains(Object o)
Description copied from class: AbstractCollection
Searches this Collection for the specified object.

Specified by:
contains in interface Collection<E>
Specified by:
contains in interface Set<E>
Overrides:
contains in class AbstractCollection<E>
Parameters:
o - the object to search for
Returns:
true if object is an element of this Collection, false otherwise

toArray

public Object[] toArray()
Description copied from class: AbstractCollection
Returns a new array containing all elements contained in this Collection. All the elements in the array will not be referenced by the collection. The elements in the returned array will be sorted to the same order as those returned by the iterator of this collection itself if the collection guarantees the order.

Specified by:
toArray in interface Collection<E>
Specified by:
toArray in interface Set<E>
Overrides:
toArray in class AbstractCollection<E>
Returns:
an array of the elements from this Collection

toArray

public <T> T[] toArray(T[] a)
Description copied from class: AbstractCollection
Returns an array containing all elements contained in this Collection. If the specified array is large enough to hold the elements, the specified array is used, otherwise an array of the same type is created. If the specified array is used and is larger than this Collection, the array element following the collection elements is set to null.

Specified by:
toArray in interface Collection<E>
Specified by:
toArray in interface Set<E>
Overrides:
toArray in class AbstractCollection<E>
Parameters:
a - the array
Returns:
an array of the elements from this Collection

clear

public void clear()
Description copied from class: AbstractCollection
Removes all the elements in this collection. This collection will be cleared up after this operation. The operation iterates over the collection, removes every element using Iterator.remove method. UnsupportedOperationException will be thrown out if the iterator returned by this collection does not implement the remove method and the collection is not zero length.

Specified by:
clear in interface Collection<E>
Specified by:
clear in interface Set<E>
Overrides:
clear in class AbstractCollection<E>
See Also:
Collection.isEmpty(), Collection.size()

iterator

public Iterator<E> iterator()
Description copied from class: AbstractCollection
Returns an Iterator on the elements of this Collection. A subclass must implement the abstract methods iterator() and size().

Specified by:
iterator in interface Iterable<E>
Specified by:
iterator in interface Collection<E>
Specified by:
iterator in interface Set<E>
Specified by:
iterator in class AbstractCollection<E>
Returns:
an Iterator on the elements of this Collection
See Also:
Iterator

remove

public boolean remove(Object o)
Description copied from class: AbstractCollection
Removes the first occurrence of the specified object from this Collection. This operation traverses over the collection, looking for the specified object. Once the object is found, the object will be removed from the collection using the iterator's remove method. This collection will throw an UnsupportedOperationException if the iterator returned does not implement remove method, and the specified object is in this collection.

Specified by:
remove in interface Collection<E>
Specified by:
remove in interface Set<E>
Overrides:
remove in class AbstractCollection<E>
Parameters:
o - the object to remove
Returns:
true if this Collection is modified, false otherwise

add

public boolean add(E o)
Description copied from class: AbstractCollection
If the specified element is not contained within this collection, and addition of this element succeeds, then true will be returned. If the specified element is already contained within this collection, or duplication is not permitted, false will be returned. Different implementations may add specific limitations on this method to filter permitted elements. For example, in some implementation, null element may be denied, and NullPointerException will be thrown out. These limitations should be explicitly documented by specific collection implementation. Add operation is not supported in this implementation, and UnsupportedOperationException will always be thrown out.

Specified by:
add in interface Collection<E>
Specified by:
add in interface Set<E>
Overrides:
add in class AbstractCollection<E>
Parameters:
o - the element to be added.
Returns:
true if the collection is changed successfully after invoking this method. Otherwise, false.

containsAll

public boolean containsAll(Collection<?> c)
Description copied from class: AbstractCollection
Searches this Collection for all objects in the specified Collection.

Specified by:
containsAll in interface Collection<E>
Specified by:
containsAll in interface Set<E>
Overrides:
containsAll in class AbstractCollection<E>
Parameters:
c - the Collection of objects
Returns:
true if all objects in the specified Collection are elements of this Collection, false otherwise

addAll

public boolean addAll(Collection<? extends E> c)
Description copied from class: AbstractCollection
Adds the objects in the specified Collection to this Collection.

Specified by:
addAll in interface Collection<E>
Specified by:
addAll in interface Set<E>
Overrides:
addAll in class AbstractCollection<E>
Parameters:
c - the Collection of objects
Returns:
true if this Collection is modified, false otherwise

removeAll

public boolean removeAll(Collection<?> c)
Description copied from class: AbstractSet
Removes all occurrences in this Collection of each object in the specified Collection.

Specified by:
removeAll in interface Collection<E>
Specified by:
removeAll in interface Set<E>
Overrides:
removeAll in class AbstractSet<E>
Parameters:
c - the Collection of objects to remove
Returns:
true if this Collection is modified, false otherwise

retainAll

public boolean retainAll(Collection<?> c)
Description copied from class: AbstractCollection
Removes all objects from this Collection that are not contained in the specified Collection. This operation traverses over the collection itself, to verify whether any element is contained in the specified collection. The object will be removed from the collection itself using the iterator's remove method if it is not contained in the specified collection. This collection will throw an UnsupportedOperationException if the iterator returned does not implement remove method, and the collection itself does contain elements which do not exist in the specified collection.

Specified by:
retainAll in interface Collection<E>
Specified by:
retainAll in interface Set<E>
Overrides:
retainAll in class AbstractCollection<E>
Parameters:
c - the Collection of objects to retain
Returns:
true if this Collection is modified, false otherwise

Build 1.0_r1(from source)

Please submit a feedback, bug or feature