E - the type of elements held in this collection
public class CopyOnWriteArrayList<E> extends Objectimplements List <E>, RandomAccess , Cloneable , Serializable
ArrayList in which all mutative operations (
add,
set, and so on) are implemented by making a fresh copy of the underlying array.
This is ordinarily too costly, but may be more efficient than alternatives when traversal operations vastly outnumber mutations, and is useful when you cannot or don't want to synchronize traversals, yet need to preclude interference among concurrent threads. The "snapshot" style iterator method uses a reference to the state of the array at the point that the iterator was created. This array never changes during the lifetime of the iterator, so interference is impossible and the iterator is guaranteed not to throw ConcurrentModificationException. The iterator will not reflect additions, removals, or changes to the list since the iterator was created. Element-changing operations on iterators themselves (remove, set, and add) are not supported. These methods throw UnsupportedOperationException.
All elements are permitted, including null.
Memory consistency effects: As with other concurrent collections, actions in a thread prior to placing an object into a CopyOnWriteArrayList happen-before actions subsequent to the access or removal of that element from the CopyOnWriteArrayList in another thread.
This class is a member of the Java Collections Framework.
| Constructor and Description |
|---|
CopyOnWriteArrayList()
Creates an empty list.
|
CopyOnWriteArrayList(Collection
Creates a list containing the elements of the specified collection, in the order they are returned by the collection's iterator.
|
CopyOnWriteArrayList(E[] toCopyIn)
Creates a list holding a copy of the given array.
|
| Modifier and Type | Method and Description |
|---|---|
boolean |
add(E e)
Appends the specified element to the end of this list.
|
void |
add(int index, E element)
Inserts the specified element at the specified position in this list.
|
boolean |
addAll(Collection
Appends all of the elements in the specified collection to the end of this list, in the order that they are returned by the specified collection's iterator.
|
boolean |
addAll(int index, Collection
Inserts all of the elements in the specified collection into this list, starting at the specified position.
|
int |
addAllAbsent(Collection
Appends all of the elements in the specified collection that are not already contained in this list, to the end of this list, in the order that they are returned by the specified collection's iterator.
|
boolean |
addIfAbsent(E e)
Appends the element, if not present.
|
void |
clear()
Removes all of the elements from this list.
|
Object |
clone()
Returns a shallow copy of this list.
|
boolean |
contains(Object
Returns
true if this list contains the specified element.
|
boolean |
containsAll(Collection
Returns
true if this list contains all of the elements of the specified collection.
|
boolean |
equals(Object
Compares the specified object with this list for equality.
|
void |
forEach(Consumer
Performs the given action for each element of the
Iterable until all elements have been processed or the action throws an exception.
|
E |
get(int index)
Returns the element at the specified position in this list.
|
int |
hashCode()
Returns the hash code value for this list.
|
int |
indexOf(E e, int index)
Returns the index of the first occurrence of the specified element in this list, searching forwards from
index, or returns -1 if the element is not found.
|
int |
indexOf(Object
Returns the index of the first occurrence of the specified element in this list, or -1 if this list does not contain the element.
|
boolean |
isEmpty()
Returns
true if this list contains no elements.
|
Iterator |
iterator()
Returns an iterator over the elements in this list in proper sequence.
|
int |
lastIndexOf(E e, int index)
Returns the index of the last occurrence of the specified element in this list, searching backwards from
index, or returns -1 if the element is not found.
|
int |
lastIndexOf(Object
Returns the index of the last occurrence of the specified element in this list, or -1 if this list does not contain the element.
|
ListIterator |
listIterator()
Returns a list iterator over the elements in this list (in proper sequence).
|
ListIterator |
listIterator(int index)
Returns a list iterator over the elements in this list (in proper sequence), starting at the specified position in the list.
|
E |
remove(int index)
Removes the element at the specified position in this list.
|
boolean |
remove(Object
Removes the first occurrence of the specified element from this list, if it is present.
|
boolean |
removeAll(Collection
Removes from this list all of its elements that are contained in the specified collection.
|
boolean |
removeIf(Predicate
Removes all of the elements of this collection that satisfy the given predicate.
|
void |
replaceAll(UnaryOperator
Replaces each element of this list with the result of applying the operator to that element.
|
boolean |
retainAll(Collection
Retains only the elements in this list that are contained in the specified collection.
|
E |
set(int index, E element)
Replaces the element at the specified position in this list with the specified element.
|
int |
size()
Returns the number of elements in this list.
|
void |
sort(Comparator
Sorts this list using the supplied
Comparator to compare elements.
|
Spliterator |
spliterator()
Returns a
Spliterator over the elements in this list.
|
List |
subList(int fromIndex, int toIndex)
Returns a view of the portion of this list between
fromIndex, inclusive, and
toIndex, exclusive.
|
Object |
toArray()
Returns an array containing all of the elements in this list in proper sequence (from first to last element).
|
<T> T[] |
toArray(T[] a)
Returns an array containing all of the elements in this list in proper sequence (from first to last element); the runtime type of the returned array is that of the specified array.
|
String |
toString()
Returns a string representation of this list.
|
finalize, getClass, notify, notifyAll, wait, wait, waitparallelStream, streampublic CopyOnWriteArrayList()
public CopyOnWriteArrayList(Collection<? extends E> c)
c - the collection of initially held elements
NullPointerException - if the specified collection is null
public CopyOnWriteArrayList(E[] toCopyIn)
toCopyIn - the array (a copy of this array is used as the internal array)
NullPointerException - if the specified array is null
public int size()
public boolean isEmpty()
true if this list contains no elements.
public boolean contains(Objecto)
true if this list contains the specified element. More formally, returns
true if and only if this list contains at least one element
e such that
(o==null ? e==null : o.equals(e)).
public int indexOf(Objecto)
public int indexOf(E e, int index)
index, or returns -1 if the element is not found. More formally, returns the lowest index
i such that
(i >= index && (e==null ? get(i)==null : e.equals(get(i)))), or -1 if there is no such index.
e - element to search for
index - index to start searching from
index or later in the list;
-1 if the element is not found.
IndexOutOfBoundsException - if the specified index is negative
public int lastIndexOf(Objecto)
lastIndexOf in interface
List<E>
o - element to search for
public int lastIndexOf(E e, int index)
index, or returns -1 if the element is not found. More formally, returns the highest index
i such that
(i <= index && (e==null ? get(i)==null : e.equals(get(i)))), or -1 if there is no such index.
e - element to search for
index - index to start searching backwards from
index in this list; -1 if the element is not found.
IndexOutOfBoundsException - if the specified index is greater than or equal to the current size of this list
public Objectclone()
public Object[] toArray()
The returned array will be "safe" in that no references to it are maintained by this list. (In other words, this method must allocate a new array). The caller is thus free to modify the returned array.
This method acts as bridge between array-based and collection-based APIs.
toArray in interface
Collection<E>
toArray in interface
List<E>
Arrays.asList(Object[])
public <T> T[] toArray(T[] a)
If this list fits in the specified array with room to spare (i.e., the array has more elements than this list), the element in the array immediately following the end of the list is set to null. (This is useful in determining the length of this list only if the caller knows that this list does not contain any null elements.)
Like the toArray() method, this method acts as bridge between array-based and collection-based APIs. Further, this method allows precise control over the runtime type of the output array, and may, under certain circumstances, be used to save allocation costs.
Suppose x is a list known to contain only strings. The following code can be used to dump the list into a newly allocated array of String:
String[] y = x.toArray(new String[0]); Note that
toArray(new Object[0]) is identical in function to
toArray().
toArray in interface
Collection<E>
toArray in interface
List<E>
T - the runtime type of the array to contain the collection
a - the array into which the elements of the list are to be stored, if it is big enough; otherwise, a new array of the same runtime type is allocated for this purpose.
ArrayStoreException - if the runtime type of the specified array is not a supertype of the runtime type of every element in this list
NullPointerException - if the specified array is null
public E get(int index)
get in interface
List<E>
index - index of the element to return
IndexOutOfBoundsException - if the index is out of range (
index < 0 || index >= size())
public E set(int index, E element)
set in interface
List<E>
index - index of the element to replace
element - element to be stored at the specified position
IndexOutOfBoundsException - if the index is out of range (
index < 0 || index >= size())
public boolean add(E e)
add in interface
Collection<E>
add in interface
List<E>
e - element to be appended to this list
true (as specified by
Collection.add(E) )
public void add(int index,
E element)
add in interface
List<E>
index - index at which the specified element is to be inserted
element - element to be inserted
IndexOutOfBoundsException - if the index is out of range (
index < 0 || index > size())
public E remove(int index)
remove in interface
List<E>
index - the index of the element to be removed
IndexOutOfBoundsException - if the index is out of range (
index < 0 || index >= size())
public boolean remove(Objecto)
i such that
(o==null ? get(i)==null : o.equals(get(i))) (if such an element exists). Returns
true if this list contained the specified element (or equivalently, if this list changed as a result of the call).
public boolean addIfAbsent(E e)
e - element to be added to this list, if absent
true if the element was added
public boolean containsAll(Collection<?> c)
true if this list contains all of the elements of the specified collection.
containsAll in interface
Collection<E>
containsAll in interface
List<E>
c - collection to be checked for containment in this list
true if this list contains all of the elements of the specified collection
NullPointerException - if the specified collection is null
contains(Object)
public boolean removeAll(Collection<?> c)
removeAll in interface
Collection<E>
removeAll in interface
List<E>
c - collection containing elements to be removed from this list
true if this list changed as a result of the call
ClassCastException - if the class of an element of this list is incompatible with the specified collection (
optional)
NullPointerException - if this list contains a null element and the specified collection does not permit null elements (
optional), or if the specified collection is null
remove(Object)
public boolean retainAll(Collection<?> c)
retainAll in interface
Collection<E>
retainAll in interface
List<E>
c - collection containing elements to be retained in this list
true if this list changed as a result of the call
ClassCastException - if the class of an element of this list is incompatible with the specified collection (
optional)
NullPointerException - if this list contains a null element and the specified collection does not permit null elements (
optional), or if the specified collection is null
remove(Object)
public int addAllAbsent(Collection<? extends E> c)
c - collection containing elements to be added to this list
NullPointerException - if the specified collection is null
addIfAbsent(Object)
public void clear()
public boolean addAll(Collection<? extends E> c)
addAll in interface
Collection<E>
addAll in interface
List<E>
c - collection containing elements to be added to this list
true if this list changed as a result of the call
NullPointerException - if the specified collection is null
add(Object)
public boolean addAll(int index,
Collection<? extends E> c)
addAll in interface
List<E>
index - index at which to insert the first element from the specified collection
c - collection containing elements to be added to this list
true if this list changed as a result of the call
IndexOutOfBoundsException - if the index is out of range (
index < 0 || index > size())
NullPointerException - if the specified collection is null
add(int,Object)
public void forEach(Consumer<? super E> action)
Iterable
Iterable until all elements have been processed or the action throws an exception. Unless otherwise specified by the implementing class, actions are performed in the order of iteration (if an iteration order is specified). Exceptions thrown by the action are relayed to the caller.
public boolean removeIf(Predicate<? super E> filter)
Collection
removeIf in interface
Collection<E>
filter - a predicate which returns
true for elements to be removed
true if any elements were removed
public void replaceAll(UnaryOperator<E> operator)
List
replaceAll in interface
List<E>
operator - the operator to apply to each element
public void sort(Comparator<? super E> c)
List
Comparator to compare elements.
sort in interface
List<E>
c - the
Comparator used to compare list elements. A
null value indicates that the elements'
natural ordering should be used
public StringtoString()
"[]"). Adjacent elements are separated by the characters
", " (comma and space). Elements are converted to strings as by
String.valueOf(Object) .
public boolean equals(Objecto)
true if the specified object is the same object as this object, or if it is also a
List and the sequence of elements returned by an
iterator over the specified list is the same as the sequence returned by an iterator over this list. The two sequences are considered to be the same if they have the same length and corresponding elements at the same position in the sequence are
equal. Two elements
e1 and
e2 are considered
equal if
(e1==null ? e2==null : e1.equals(e2)).
equals in interface
Collection<E>
equals in interface
List<E>
equals in class
Object
o - the object to be compared for equality with this list
true if the specified object is equal to this list
Object.hashCode() ,
HashMap
public int hashCode()
This implementation uses the definition in List.
hashCode in interface
Collection<E>
hashCode in interface
List<E>
hashCode in class
Object
Object.equals(java.lang.Object) ,
System.identityHashCode(java.lang.Object)
public Iterator<E> iterator()
The returned iterator provides a snapshot of the state of the list when the iterator was constructed. No synchronization is needed while traversing the iterator. The iterator does NOT support the remove method.
public ListIterator<E> listIterator()
The returned iterator provides a snapshot of the state of the list when the iterator was constructed. No synchronization is needed while traversing the iterator. The iterator does NOT support the remove, set or add methods.
listIterator in interface
List<E>
public ListIterator<E> listIterator(int index)
next. An initial call to
previous would return the element with the specified index minus one.
The returned iterator provides a snapshot of the state of the list when the iterator was constructed. No synchronization is needed while traversing the iterator. The iterator does NOT support the remove, set or add methods.
listIterator in interface
List<E>
index - index of the first element to be returned from the list iterator (by a call to
next)
IndexOutOfBoundsException - if the index is out of range (
index < 0 || index > size())
public Spliterator<E> spliterator()
Spliterator over the elements in this list.
The Spliterator reports Spliterator, Spliterator, Spliterator, and Spliterator.
The spliterator provides a snapshot of the state of the list when the spliterator was constructed. No synchronization is needed while operating on the spliterator.
spliterator in interface
Iterable<E>
spliterator in interface
Collection<E>
spliterator in interface
List<E>
Spliterator over the elements in this list
public List<E> subList(int fromIndex, int toIndex)
fromIndex, inclusive, and
toIndex, exclusive. The returned list is backed by this list, so changes in the returned list are reflected in this list.
The semantics of the list returned by this method become undefined if the backing list (i.e., this list) is modified in any way other than via the returned list.
subList in interface
List<E>
fromIndex - low endpoint (inclusive) of the subList
toIndex - high endpoint (exclusive) of the subList
IndexOutOfBoundsException - for an illegal endpoint index value (
fromIndex < 0 || toIndex > size || fromIndex > toIndex)