public class CopyOnWriteArrayList<E> extends Object implements List<E>, RandomAccess, Cloneable, Serializable
Read operations (including get(int)
) do not block and may overlap with
update operations. Reads reflect the results of the most recently completed
operations. Aggregate operations like addAll(java.util.Collection<? extends E>)
and clear()
are
atomic; they never expose an intermediate state.
Iterators of this list never throw ConcurrentModificationException
. When an iterator is created, it keeps a
copy of the list's contents. It is always safe to iterate this list, but
iterations may not reflect the latest state of the list.
Iterators returned by this list and its sub lists cannot modify the
underlying list. In particular, Iterator.remove()
, ListIterator.add(E)
and ListIterator.set(E)
all throw UnsupportedOperationException
.
This class offers extended API beyond the List
interface. It
includes additional overloads for indexed search (indexOf(E, int)
and lastIndexOf(E, int)
) and methods for conditional adds (addIfAbsent(E)
and
addAllAbsent(java.util.Collection<? extends E>)
).
Constructor and Description |
---|
CopyOnWriteArrayList()
Creates a new empty instance.
|
CopyOnWriteArrayList(Collection<? extends E> collection)
Creates a new instance containing the elements of
collection . |
CopyOnWriteArrayList(E[] array)
Creates a new instance containing the elements of
array . |
Modifier and Type | Method and Description |
---|---|
boolean |
add(E e)
Adds the specified object at the end of this
List . |
void |
add(int index,
E e)
Inserts the specified object into this
List at the specified location. |
boolean |
addAll(Collection<? extends E> collection)
Adds the objects in the specified collection to the end of this
List . |
boolean |
addAll(int index,
Collection<? extends E> collection)
Inserts the objects in the specified collection at the specified location
in this
List . |
int |
addAllAbsent(Collection<? extends E> collection)
Adds the elements of
collection that are not already present in
this list. |
boolean |
addIfAbsent(E object)
Adds
object to the end of this list if it is not already present. |
void |
clear()
Removes all elements from this
List , leaving it empty. |
Object |
clone()
Creates and returns a copy of this
Object . |
boolean |
contains(Object o)
Tests whether this
List contains the specified object. |
boolean |
containsAll(Collection<?> collection)
Tests whether this
List contains all objects contained in the
specified collection. |
boolean |
equals(Object other)
Compares this instance with the specified object and indicates if they
are equal.
|
E |
get(int index)
Returns the element at the specified location in this
List . |
int |
hashCode()
Returns an integer hash code for this object.
|
int |
indexOf(E object,
int from)
Searches this list for
object and returns the index of the first
occurrence that is at or after from . |
int |
indexOf(Object object)
Searches this
List for the specified object and returns the index of the
first occurrence. |
boolean |
isEmpty()
Returns whether this
List contains no elements. |
Iterator<E> |
iterator()
Returns an
Iterator that iterates over the elements of this list
as they were at the time of this method call. |
int |
lastIndexOf(E object,
int to)
Searches this list for
object and returns the index of the last
occurrence that is before to . |
int |
lastIndexOf(Object object)
Searches this
List for the specified object and returns the index of the
last occurrence. |
ListIterator<E> |
listIterator()
Equivalent to
listIterator(0) . |
ListIterator<E> |
listIterator(int index)
Returns a
ListIterator that iterates over the elements of this
list as they were at the time of this method call. |
E |
remove(int index)
Removes the object at the specified location from this
List . |
boolean |
remove(Object o)
Removes the first occurrence of the specified object from this
List . |
boolean |
removeAll(Collection<?> collection)
Removes all occurrences in this
List of each object in the specified
collection. |
boolean |
retainAll(Collection<?> collection)
Removes all objects from this
List that are not contained in the
specified collection. |
E |
set(int index,
E e)
Replaces the element at the specified location in this
List with the
specified object. |
int |
size()
Returns the number of elements in this
List . |
List<E> |
subList(int from,
int to)
Returns a
List of the specified portion of this List from the given start
index to the end index minus one. |
Object[] |
toArray()
Returns an array containing all elements contained in this
List . |
<T> T[] |
toArray(T[] contents)
Returns an array containing all elements contained in this
List . |
String |
toString()
Returns a string containing a concise, human-readable description of this
object.
|
public CopyOnWriteArrayList()
public CopyOnWriteArrayList(Collection<? extends E> collection)
collection
.public CopyOnWriteArrayList(E[] array)
array
.public Object clone()
Object
Object
. The default
implementation returns a so-called "shallow" copy: It creates a new
instance of the same class and then copies the field values (including
object references) from this instance to the new instance. A "deep" copy,
in contrast, would also recursively clone nested objects. A subclass that
needs to implement this kind of cloning should call super.clone()
to create the new instance and then create deep copies of the nested,
mutable objects.public int size()
List
List
.public E get(int index)
List
List
.public boolean contains(Object o)
List
List
contains the specified object.public boolean containsAll(Collection<?> collection)
List
List
contains all objects contained in the
specified collection.containsAll
in interface Collection<E>
containsAll
in interface List<E>
collection
- the collection of objectstrue
if all objects in the specified collection are
elements of this List
, false
otherwise.public int indexOf(E object, int from)
object
and returns the index of the first
occurrence that is at or after from
.public int indexOf(Object object)
List
List
for the specified object and returns the index of the
first occurrence.public int lastIndexOf(E object, int to)
object
and returns the index of the last
occurrence that is before to
.public int lastIndexOf(Object object)
List
List
for the specified object and returns the index of the
last occurrence.lastIndexOf
in interface List<E>
object
- the object to search for.public boolean isEmpty()
List
List
contains no elements.isEmpty
in interface Collection<E>
isEmpty
in interface List<E>
true
if this List
has no elements, false
otherwise.List.size()
public Iterator<E> iterator()
Iterator
that iterates over the elements of this list
as they were at the time of this method call. Changes to the list made
after this method call will not be reflected by the iterator, nor will
they trigger a ConcurrentModificationException
.
The returned iterator does not support Iterator.remove()
.
public ListIterator<E> listIterator(int index)
ListIterator
that iterates over the elements of this
list as they were at the time of this method call. Changes to the list
made after this method call will not be reflected by the iterator, nor
will they trigger a ConcurrentModificationException
.
The returned iterator does not support ListIterator.add(E)
,
ListIterator.set(E)
or Iterator.remove()
,
listIterator
in interface List<E>
index
- the index at which to start the iteration.List
.ListIterator
public ListIterator<E> listIterator()
listIterator(0)
.listIterator
in interface List<E>
List
iterator on the elements of this List
ListIterator
public List<E> subList(int from, int to)
List
List
of the specified portion of this List
from the given start
index to the end index minus one. The returned List
is backed by this
List
so changes to it are reflected by the other.public Object[] toArray()
List
List
.public <T> T[] toArray(T[] contents)
List
List
. 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 List
, the array element following
the collection elements is set to null.public boolean equals(Object other)
Object
o
must represent the same object
as this instance using a class-specific comparison. The general contract
is that this comparison should be reflexive, symmetric, and transitive.
Also, no object reference other than null is equal to null.
The default implementation returns true
only if this ==
o
. See Writing a correct
equals
method
if you intend implementing your own equals
method.
The general contract for the equals
and Object.hashCode()
methods is that if equals
returns true
for
any two objects, then hashCode()
must return the same value for
these objects. This means that subclasses of Object
usually
override either both methods or neither of them.
equals
in interface Collection<E>
equals
in interface List<E>
equals
in class Object
other
- the object to compare this instance with.true
if the specified object is equal to this Object
; false
otherwise.Object.hashCode()
public int hashCode()
Object
Object.equals(java.lang.Object)
returns true
must return
the same hash code value. This means that subclasses of Object
usually override both methods or neither method.
Note that hash values must not change over time unless information used in equals comparisons also changes.
See Writing a correct
hashCode
method
if you intend implementing your own hashCode
method.
hashCode
in interface Collection<E>
hashCode
in interface List<E>
hashCode
in class Object
Object.equals(java.lang.Object)
public String toString()
Object
getClass().getName() + '@' + Integer.toHexString(hashCode())
See Writing a useful
toString
method
if you intend implementing your own toString
method.
public boolean add(E e)
List
List
.public void add(int index, E e)
List
List
at the specified location.
The object is inserted before the current element at the specified
location. If the location is equal to the size of this List
, the object
is added at the end. If the location is smaller than the size of this
List
, then all elements beyond the specified location are moved by one
position towards the end of the List
.public boolean addAll(Collection<? extends E> collection)
List
List
. The
objects are added in the order in which they are returned from the
collection's iterator.public boolean addAll(int index, Collection<? extends E> collection)
List
List
. The objects are added in the order they are returned from
the collection's iterator.public int addAllAbsent(Collection<? extends E> collection)
collection
that are not already present in
this list. If collection
includes a repeated value, at most one
occurrence of that value will be added to this list. Elements are added
at the end of this list.
Callers of this method may prefer CopyOnWriteArraySet
, whose
API is more appropriate for set operations.
public boolean addIfAbsent(E object)
object
to the end of this list if it is not already present.
Callers of this method may prefer CopyOnWriteArraySet
, whose
API is more appropriate for set operations.
public void clear()
List
List
, leaving it empty.clear
in interface Collection<E>
clear
in interface List<E>
List.isEmpty()
,
List.size()
public E remove(int index)
List
List
.public boolean remove(Object o)
List
List
.public boolean removeAll(Collection<?> collection)
List
List
of each object in the specified
collection.public boolean retainAll(Collection<?> collection)
List
List
that are not contained in the
specified collection.