CopyOnWriteArrayList<E> | java.util.concurrent | Java 5.0 | cloneable serializable collection | 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. Figure 16-78. java.util.concurrent.CopyOnWriteArrayList<E> 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 ( ); } |