Класс CopyOnWriteArrayList<E>
- Параметры типа:
E— тип элементов, хранящихся в этом списке
- Реализуемые интерфейсы:
Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, RandomAccess, SequencedCollection<E>
public class CopyOnWriteArrayList<E> extends Object implements List<E>, RandomAccess, Cloneable, Serializable
ArrayList, в котором все изменяющие операции (add, set и т. д.) реализованы путём создания новой копии базового массива. Обычно это слишком затратно, но может быть более эффективным, чем альтернативные варианты, если операции обхода значительно преобладают над изменениями; такой вариант полезен, когда вы не можете или не хотите синхронизировать обходы, но при этом необходимо предотвратить взаимное влияние потоков. Метод итератора в стиле «снимка» использует ссылку на состояние массива в момент создания итератора. Этот массив не изменяется в течение всего времени существования итератора, поэтому взаимное влияние исключено, а итератор гарантированно не выбрасывает ConcurrentModificationException. Итератор не будет отражать добавления, удаления или изменения списка, произошедшие после его создания. Операции изменения элементов, выполняемые непосредственно итераторами (remove, set и add), не поддерживаются. Эти методы выбрасывают UnsupportedOperationException.
Допускаются любые элементы, включая null.
Эффекты согласованности памяти: как и в других параллельных коллекциях, действия в потоке, предшествующие добавлению объекта в CopyOnWriteArrayList, происходят раньше действий, следующих за обращением к этому элементу или его удалением из CopyOnWriteArrayList в другом потоке.
Этот класс является частью фреймворка коллекций Java.
- Начиная с версии:
- 1.5
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
CopyOnWriteArrayList() |
Создаёт пустой список. |
CopyOnWriteArrayList |
Создаёт список, содержащий копию указанного массива. |
CopyOnWriteArrayList |
Создаёт список, содержащий элементы указанной коллекции в порядке, в котором их возвращает итератор этой коллекции. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
add |
Вставляет указанный элемент в указанную позицию этого списка. |
boolean |
add |
Добавляет указанный элемент в конец этого списка. |
boolean |
addAll |
Вставляет все элементы указанной коллекции в этот список, начиная с указанной позиции. |
boolean |
addAll |
Добавляет все элементы указанной коллекции в конец этого списка в порядке, в котором их возвращает итератор указанной коллекции. |
int |
addAllAbsent |
Добавляет в конец этого списка все элементы указанной коллекции, которых ещё нет в этом списке, в порядке, в котором их возвращает итератор указанной коллекции. |
void |
addFirst |
Добавляет элемент в начало этой коллекции (необязательная операция). |
boolean |
addIfAbsent |
Добавляет элемент, если он ещё не присутствует. |
void |
addLast |
Добавляет элемент в конец этой коллекции (необязательная операция). |
void |
clear() |
Удаляет все элементы из этого списка. |
Object |
clone() |
Возвращает поверхностную копию этого списка. |
boolean |
contains |
Возвращает true, если этот список содержит указанный элемент. |
boolean |
containsAll |
Возвращает true, если этот список содержит все элементы указанной коллекции. |
boolean |
equals |
Сравнивает указанный объект с этим списком на равенство. |
void |
forEach |
Выполняет указанное действие для каждого элемента Iterable, пока не будут обработаны все элементы или действие не выбросит исключение. |
E |
get |
Возвращает элемент, находящийся в указанной позиции этого списка. |
E |
getFirst() |
Получает первый элемент этой коллекции. |
E |
getLast() |
Получает последний элемент этой коллекции. |
int |
hashCode() |
Возвращает значение хеш-кода этого списка. |
int |
indexOf |
Возвращает индекс первого вхождения указанного элемента в этом списке, выполняя поиск вперёд от index, или возвращает -1, если элемент не найден. |
int |
indexOf |
Возвращает индекс первого вхождения указанного элемента в этом списке или -1, если список не содержит этот элемент. |
boolean |
isEmpty() |
Возвращает true, если этот список не содержит элементов. |
Iterator |
iterator() |
Возвращает итератор по элементам этого списка в надлежащем порядке. |
int |
lastIndexOf |
Возвращает индекс последнего вхождения указанного элемента в этом списке, выполняя поиск назад от index, или возвращает -1, если элемент не найден. |
int |
lastIndexOf |
Возвращает индекс последнего вхождения указанного элемента в этом списке или -1, если список не содержит этот элемент. |
ListIterator |
listIterator() |
Возвращает итератор списка по элементам этого списка (в надлежащем порядке). |
ListIterator |
listIterator |
Возвращает итератор списка по элементам этого списка (в надлежащем порядке), начиная с указанной позиции списка. |
E |
remove |
Удаляет элемент, находящийся в указанной позиции этого списка. |
boolean |
remove |
Удаляет первое вхождение указанного элемента из этого списка, если он присутствует. |
boolean |
removeAll |
Удаляет из этого списка все элементы, содержащиеся в указанной коллекции. |
E |
removeFirst() |
Удаляет и возвращает первый элемент этой коллекции (необязательная операция). |
boolean |
removeIf |
Удаляет все элементы этой коллекции, удовлетворяющие указанному предикату (необязательная операция). |
E |
removeLast() |
Удаляет и возвращает последний элемент этой коллекции (необязательная операция). |
boolean |
retainAll |
Оставляет в этом списке только элементы, содержащиеся в указанной коллекции. |
List |
reversed() |
Возвращает представление этой коллекции в обратном порядке. |
E |
set |
Заменяет элемент, находящийся в указанной позиции этого списка, указанным элементом. |
int |
size() |
Возвращает количество элементов в этом списке. |
Spliterator |
spliterator() |
Возвращает Spliterator для элементов этого списка. |
List |
subList |
Возвращает представление части этого списка между fromIndex включительно и toIndex исключительно. |
Object[] |
toArray() |
Возвращает массив, содержащий все элементы этого списка в надлежащем порядке (от первого элемента к последнему). |
<T> T[] |
toArray |
Возвращает массив, содержащий все элементы этого списка в надлежащем порядке (от первого элемента к последнему); тип возвращаемого массива во время выполнения соответствует типу указанного массива. |
String |
toString() |
Возвращает строковое представление этого списка. |
Методы, объявленные в классе Object
finalize, getClass, notify, notifyAll, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии. Финализация устарела и будет удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс этого Object во время выполнения. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо истечения определённого промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо истечения определённого промежутка реального времени. |
Методы, объявленные в интерфейсе Collection
parallelStream, stream, toArray | Модификатор и тип | Метод | Описание |
|---|---|---|
default Stream |
parallelStream() |
Возвращает, возможно, параллельный Stream, источником которого является эта коллекция. |
default Stream |
stream() |
Возвращает последовательный Stream, источником которого является эта коллекция. |
default <T> T[] |
toArray |
Возвращает массив, содержащий все элементы этой коллекции; для выделения возвращаемого массива используется предоставленная функция generator. |
Методы, объявленные в интерфейсе List
replaceAll, sort | Модификатор и тип | Метод | Описание |
|---|---|---|
default void |
replaceAll |
Заменяет каждый элемент этого списка результатом применения оператора к этому элементу (необязательная операция). |
default void |
sort |
Сортирует этот список в соответствии с порядком, задаваемым указанным Comparator (необязательная операция). |
Подробное описание конструкторов
CopyOnWriteArrayList
public CopyOnWriteArrayList()
CopyOnWriteArrayList
public CopyOnWriteArrayList(Collection<? extends E> c)
- Параметры:
-
c— коллекция изначально содержащихся элементов - Исключения:
-
NullPointerException— если указанная коллекция равна null
CopyOnWriteArrayList
public CopyOnWriteArrayList(E[] toCopyIn)
- Параметры:
-
toCopyIn— массив (в качестве внутреннего массива используется его копия) - Исключения:
-
NullPointerException— если указанный массив равен null
Подробное описание методов
size
isEmpty
contains
public boolean contains(Object o)
true, если этот список содержит указанный элемент. Точнее, возвращает true тогда и только тогда, когда этот список содержит хотя бы один элемент e, такой что Objects.equals(o, e).indexOf
public int indexOf(Object o)
i, такой что Objects.equals(o, get(i)), или -1, если такого индекса нет.indexOf
public int indexOf(E e, int index)
index, или возвращает -1, если элемент не найден. Точнее, возвращает наименьший индекс i, такой что i >= index && Objects.equals(get(i), e), или -1, если такого индекса нет.- Параметры:
-
e— искомый элемент -
index— индекс, с которого начинается поиск - Возвращает:
- индекс первого вхождения элемента в этом списке в позиции
indexили далее;-1, если элемент не найден. - Исключения:
-
IndexOutOfBoundsException— если указанный индекс отрицателен
lastIndexOf
public int lastIndexOf(Object o)
i, такой что Objects.equals(o, get(i)), или -1, если такого индекса нет.- Определено в:
-
lastIndexOfв интерфейсеList<E> - Параметры:
-
o— искомый элемент - Возвращает:
- индекс последнего вхождения указанного элемента в этот список или -1, если список не содержит этот элемент
lastIndexOf
public int lastIndexOf(E e, int index)
index, или возвращает -1, если элемент не найден. Точнее, возвращает наибольший индекс i, такой что i <= index && Objects.equals(get(i), e), или -1, если такого индекса нет.- Параметры:
-
e— искомый элемент -
index— индекс, с которого начинается поиск назад - Возвращает:
- индекс последнего вхождения элемента в позиции, меньшей или равной
indexв этом списке; -1, если элемент не найден. - Исключения:
-
IndexOutOfBoundsException— если указанный индекс больше или равен текущему размеру этого списка
clone
toArray
public Object[] toArray()
Возвращаемый массив является «безопасным»: этот список не хранит на него ссылок. (Иными словами, этот метод должен выделить новый массив.) Поэтому вызывающий код может свободно изменять возвращённый массив.
Этот метод служит связующим звеном между API на основе массивов и API на основе коллекций.
toArray
public <T> T[] toArray(T[] a)
Если список помещается в указанный массив с запасом (то есть массив содержит больше элементов, чем этот список), элемент массива, непосредственно следующий за концом списка, устанавливается в null. (Это позволяет определить длину списка только в том случае, если вызывающий код знает, что список не содержит элементов null.)
Как и метод toArray(), этот метод служит связующим звеном между API на основе массивов и API на основе коллекций. Кроме того, этот метод позволяет точно управлять типом выходного массива во время выполнения и при определённых обстоятельствах может использоваться для снижения затрат на выделение памяти.
Предположим, что x — это список, который, как известно, содержит только строки. Следующий код можно использовать для выгрузки списка в новый массив типа String:
String[] y = x.toArray(new String[0]); Обратите внимание, что toArray(new Object[0]) по функциональности идентичен toArray().- Определено в:
-
toArrayв интерфейсеCollection<E> - Определено в:
-
toArrayв интерфейсеList<E> - Параметры типа:
T— тип компонентов массива, в котором будет храниться коллекция- Параметры:
-
a— массив, в котором должны храниться элементы списка, если он достаточно велик; в противном случае для этой цели выделяется новый массив того же типа во время выполнения. - Возвращает:
- массив, содержащий все элементы этого списка
- Исключения:
-
ArrayStoreException— если тип указанного массива во время выполнения не является супертипом типа во время выполнения каждого элемента этого списка -
NullPointerException— если указанный массив равен null
get
public E get(int index)
- Определено в:
-
getв интерфейсеList<E> - Параметры:
-
index— индекс возвращаемого элемента - Возвращает:
- элемент, находящийся в указанной позиции этого списка
- Исключения:
-
IndexOutOfBoundsException— если индекс выходит за допустимые пределы (index < 0 || index >= size())
getFirst
public E getFirst()
- Определено в:
-
getFirstв интерфейсеList<E> - Определено в:
-
getFirstв интерфейсеSequencedCollection<E> - Возвращает:
- полученный элемент
- Исключения:
-
NoSuchElementException— если эта коллекция пуста - Начиная с версии:
- 21
getLast
public E getLast()
- Определено в:
-
getLastв интерфейсеList<E> - Определено в:
-
getLastв интерфейсеSequencedCollection<E> - Возвращает:
- полученный элемент
- Исключения:
-
NoSuchElementException— если эта коллекция пуста - Начиная с версии:
- 21
set
public E set(int index, E element)
- Определено в:
-
setв интерфейсеList<E> - Параметры:
-
index— индекс заменяемого элемента -
element— элемент, который будет сохранён в указанной позиции - Возвращает:
- элемент, ранее находившийся в указанной позиции
- Исключения:
-
IndexOutOfBoundsException— если индекс выходит за допустимые пределы (index < 0 || index >= size())
add
public boolean add(E e)
- Определено в:
-
addв интерфейсеCollection<E> - Определено в:
-
addв интерфейсеList<E> - Параметры:
-
e— элемент, добавляемый в конец этого списка - Возвращает:
-
true(как указано вCollection.add(E))
add
public void add(int index, E element)
- Определено в:
-
addв интерфейсеList<E> - Параметры:
-
index— позиция, в которую нужно вставить указанный элемент -
element— вставляемый элемент - Исключения:
-
IndexOutOfBoundsException— если индекс выходит за допустимые пределы (index < 0 || index > size())
addFirst
public void addFirst(E e)
addLast
public void addLast(E e)
remove
public E remove(int index)
- Определено в:
-
removeв интерфейсеList<E> - Параметры:
-
index— индекс удаляемого элемента - Возвращает:
- элемент, ранее находившийся в указанной позиции
- Исключения:
-
IndexOutOfBoundsException— если индекс выходит за допустимые пределы (index < 0 || index >= size())
removeFirst
public E removeFirst()
- Определено в:
-
removeFirstв интерфейсеList<E> - Определено в:
-
removeFirstв интерфейсеSequencedCollection<E> - Возвращает:
- удалённый элемент
- Исключения:
-
NoSuchElementException— если эта коллекция пуста - Начиная с версии:
- 21
removeLast
public E removeLast()
- Определено в:
-
removeLastв интерфейсеList<E> - Определено в:
-
removeLastв интерфейсеSequencedCollection<E> - Возвращает:
- удалённый элемент
- Исключения:
-
NoSuchElementException— если эта коллекция пуста - Начиная с версии:
- 21
remove
public boolean remove(Object o)
i, такой что Objects.equals(o, get(i)) (если такой элемент существует). Возвращает true, если этот список содержал указанный элемент (или, что то же самое, если в результате вызова список изменился).addIfAbsent
public boolean addIfAbsent(E e)
- Параметры:
-
e— элемент, добавляемый в этот список, если он отсутствует - Возвращает:
-
true, если элемент был добавлен
containsAll
public boolean containsAll(Collection<?> c)
true, если этот список содержит все элементы указанной коллекции.- Определено в:
-
containsAllв интерфейсеCollection<E> - Определено в:
-
containsAllв интерфейсеList<E> - Параметры:
-
c— коллекция, наличие элементов которой проверяется в этом списке - Возвращает:
-
true, если этот список содержит все элементы указанной коллекции - Исключения:
-
NullPointerException— если указанная коллекция равна null - См. также:
removeAll
public boolean removeAll(Collection<?> c)
- Определено в:
-
removeAllв интерфейсеCollection<E> - Определено в:
-
removeAllв интерфейсеList<E> - Параметры:
-
c— коллекция, содержащая элементы, которые нужно удалить из этого списка - Возвращает:
-
true, если в результате вызова этот список изменился - Исключения:
-
ClassCastException— если класс элемента этого списка несовместим с указанной коллекцией (необязательно) -
NullPointerException— если этот список содержит элемент null, а указанная коллекция не допускает элементы null (необязательно), или если указанная коллекция равна null - См. также:
retainAll
public boolean retainAll(Collection<?> c)
- Определено в:
-
retainAllв интерфейсеCollection<E> - Определено в:
-
retainAllв интерфейсеList<E> - Параметры:
-
c— коллекция, содержащая элементы, которые нужно оставить в этом списке - Возвращает:
-
true, если в результате вызова этот список изменился - Исключения:
-
ClassCastException— если класс элемента этого списка несовместим с указанной коллекцией (необязательно) -
NullPointerException— если этот список содержит элемент null, а указанная коллекция не допускает элементы null (необязательно), или если указанная коллекция равна null - См. также:
addAllAbsent
public int addAllAbsent(Collection<? extends E> c)
- Параметры:
-
c— коллекция, содержащая элементы, которые нужно добавить в этот список - Возвращает:
- количество добавленных элементов
- Исключения:
-
NullPointerException— если указанная коллекция равна null - См. также:
clear
addAll
public boolean addAll(Collection<? extends E> c)
- Определено в:
-
addAllв интерфейсеCollection<E> - Определено в:
-
addAllв интерфейсеList<E> - Параметры:
-
c— коллекция, содержащая элементы, которые нужно добавить в этот список - Возвращает:
-
true, если в результате вызова этот список изменился - Исключения:
-
NullPointerException— если указанная коллекция равна null - См. также:
addAll
public boolean addAll(int index, Collection<? extends E> c)
- Определено в:
-
addAllв интерфейсеList<E> - Параметры:
-
index— индекс, в который нужно вставить первый элемент указанной коллекции -
c— коллекция, содержащая элементы, которые нужно добавить в этот список - Возвращает:
-
true, если в результате вызова этот список изменился - Исключения:
-
IndexOutOfBoundsException— если индекс выходит за допустимые пределы (index < 0 || index > size()) -
NullPointerException— если указанная коллекция равна null - См. также:
forEach
public void forEach(Consumer<? super E> action)
IterableIterable до тех пор, пока не будут обработаны все элементы или действие не вызовет исключение. Если порядок обхода задан, действия выполняются в этом порядке. Исключения, вызванные действием, передаются вызывающему коду. Поведение этого метода не определено, если действие выполняет побочные эффекты, изменяющие исходный источник элементов, за исключением случаев, когда в переопределяющем классе задана политика параллельного изменения.
- Определено в:
-
forEachв интерфейсеIterable<E> - Параметры:
-
action— действие, выполняемое для каждого элемента - Исключения:
-
NullPointerException— если указанное действие равно null
removeIf
public boolean removeIf(Predicate<? super E> filter)
Collection- Определено в:
-
removeIfв интерфейсеCollection<E> - Параметры:
-
filter— предикат, возвращающийtrueдля удаляемых элементов - Возвращает:
-
true, если были удалены какие-либо элементы - Исключения:
-
NullPointerException— если указанный фильтр равен null
toString
public String toString()
"[]"). Соседние элементы разделяются символами ", " (запятая и пробел). Элементы преобразуются в строки так же, как в методе String.valueOf(Object).equals
public boolean equals(Object o)
true, если указанный объект является тем же объектом, что и этот объект, или если он также является List, а последовательность элементов, возвращаемых итератором по указанному списку, совпадает с последовательностью, возвращаемой итератором по этому списку. Две последовательности считаются одинаковыми, если они имеют одинаковую длину и соответствующие элементы на одинаковых позициях в последовательности равны. Два элемента e1 и e2 считаются равными, если Objects.equals(e1, e2).hashCode
public int hashCode()
В этой реализации используется определение из List.hashCode().
iterator
public Iterator<E> iterator()
Возвращаемый итератор предоставляет снимок состояния списка на момент создания итератора. При обходе итератора синхронизация не требуется. Итератор НЕ поддерживает метод remove.
listIterator
public ListIterator<E> listIterator()
Возвращаемый итератор предоставляет снимок состояния списка на момент создания итератора. При обходе итератора синхронизация не требуется. Итератор НЕ поддерживает методы remove, set или add.
- Определено в:
-
listIteratorв интерфейсеList<E> - Возвращает:
- итератор списка по элементам этого списка (в надлежащем порядке)
listIterator
public ListIterator<E> listIterator(int index)
next. Первоначальный вызов previous вернёт элемент с индексом на единицу меньше указанного. Возвращаемый итератор предоставляет снимок состояния списка на момент создания итератора. При обходе итератора синхронизация не требуется. Итератор НЕ поддерживает методы remove, set или add.
- Определено в:
-
listIteratorв интерфейсеList<E> - Параметры:
-
index— индекс первого элемента, который будет возвращён итератором списка (при вызовеnext) - Возвращает:
- итератор списка по элементам этого списка (в надлежащем порядке), начиная с указанной позиции в списке
- Выбрасывает:
-
IndexOutOfBoundsException— если индекс находится вне допустимого диапазона (index < 0 || index > size())
spliterator
public Spliterator<E> spliterator()
Spliterator для элементов этого списка. Spliterator сообщает о свойствах Spliterator.IMMUTABLE, Spliterator.ORDERED, Spliterator.SIZED и Spliterator.SUBSIZED.
Сплитератор предоставляет снимок состояния списка на момент создания сплитератора. При работе со сплитератором синхронизация не требуется.
- Определено в:
-
spliteratorв интерфейсеCollection<E> - Определено в:
-
spliteratorв интерфейсеIterable<E> - Определено в:
-
spliteratorв интерфейсеList<E> - Возвращает:
Spliteratorдля элементов этого списка- С версии:
- 1.8
subList
public List<E> subList(int fromIndex, int toIndex)
fromIndex (включительно) и toIndex (исключительно). Возвращаемый список основан на этом списке, поэтому изменения в возвращаемом списке отражаются в этом списке. Семантика списка, возвращаемого этим методом, становится неопределённой, если базовый список (то есть этот список) изменяется каким-либо образом, кроме изменений через возвращаемый список.
- Определено в:
-
subListв интерфейсеList<E> - Параметры:
-
fromIndex— нижняя граница (включительно) подсписка -
toIndex— верхняя граница (исключительно) подсписка - Возвращает:
- представление указанного диапазона в этом списке
- Выбрасывает:
-
IndexOutOfBoundsException— при недопустимом значении индекса границы (fromIndex < 0 || toIndex > size || fromIndex > toIndex)
reversed
public List<E> reversed()
Изменения в представлении с обратным порядком разрешены и будут передаваться в этот список. Кроме того, изменения этого списка будут видны в представлении с обратным порядком. Для подсписков и итераторов представления с обратным порядком действуют те же ограничения, что и для этого списка.
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.