This class is a threadsafe
java.util.List implementation based on an array.
Any number of read operations may proceed concurrently. All update
methods are synchronized and make a completely new
copy of the internal array, so this class is best suited to
applications in which reads greatly outnumber updates. The
Iterator of a
CopyOnWriteArrayList operates on the copy of the
array that was current when the iterator( ) method
was called: it does not see any updates that occur after the call to
iterator( ) and is guaranteed never to throw
ConcurrentModificationException. Update methods of
the Iterator and ListIterator
interfaces are not supported and throw
UnsupportedOperationException.
CopyOnWriteArrayList defines a few useful methods
beyond those specified by the List interface.
addIfAbsent( )
atomically adds an element to the list, but only if the list does not
already contain that element. addAllAbsent( ) adds
all elements of a collection that are not already in the list. Two
new indexOf( )
and lastIndexOf( ) methods are defined that
specify a starting index for the search. These provide a convenient
alternative to using a subList( ) view when
searching for repeated matches in a list.

public class CopyOnWriteArrayList<E> implements java.util.List<E>,
java.util.RandomAccess, Cloneable, Serializable {
// Public Constructors
public CopyOnWriteArrayList( );
public CopyOnWriteArrayList(java.util.Collection<? extends E> c);
public CopyOnWriteArrayList(E[ ] toCopyIn);
// Public Instance Methods
public int addAllAbsent(java.util.Collection<? extends E> c); synchronized
public boolean addIfAbsent(E element); synchronized
public int indexOf(E elem, int index);
public int lastIndexOf(E elem, int index);
// Methods Implementing List
public boolean add(E element); synchronized
public void add(int index, E element); synchronized
public boolean addAll(java.util.Collection<? extends E> c); synchronized
public boolean addAll(int index, java.util.Collection<? extends E> c); synchronized
public void clear( ); synchronized
public boolean contains(Object elem);
public boolean containsAll(java.util.Collection<?> c);
public boolean equals(Object o);
public E get(int index);
public int hashCode( );
public int indexOf(Object elem);
public boolean isEmpty( ); default:true
public java.util.Iterator<E> iterator( );
public int lastIndexOf(Object elem);
public java.util.ListIterator<E> listIterator( );
public java.util.ListIterator<E> listIterator(int index);
public boolean remove(Object o); synchronized
public E remove(int index); synchronized
public boolean removeAll(java.util.Collection<?> c); synchronized
public boolean retainAll(java.util.Collection<?> c); synchronized
public E set(int index, E element); synchronized
public int size( );
public java.util.List<E> subList(int fromIndex, int toIndex); synchronized
public Object[ ] toArray( );
public <T> T[ ] toArray(T[ ] a);
// Public Methods Overriding Object
public Object clone( );
public String toString( );
}