Класс CopyOnWriteArrayList<E>
- Type Parameters:
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.
- Since:
- 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() |
Возвращает строковое представление этого списка. |
Методы, объявленные в классе java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
Методы, объявленные в интерфейсе java.util.Collection
parallelStream, stream, toArray
Методы, объявленные в интерфейсе java.util.List
replaceAll, sort
Подробное описание конструкторов
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)
indexOf
public int indexOf(Object o)
indexOf
public int indexOf(E e, int index)
- Параметры:
-
e- искомый элемент -
index- индекс, с которого начинается поиск - Возвращает:
- индекс первого вхождения элемента в этом списке на позиции или позже в списке; -1, если элемент не найден.
- Исключения:
-
IndexOutOfBoundsException- если указанный индекс отрицательный
lastIndexOf
public int lastIndexOf(Object o)
- Унаследовано от:
-
lastIndexOfв интерфейсеList<E> - Параметры:
-
o- искомый элемент - Возвращает:
- индекс последнего вхождения указанного элемента в этот список, или -1, если этот список не содержит элемента
lastIndexOf
public int lastIndexOf(E e, int index)
- Параметры:
-
e- искомый элемент -
index- индекс, с которого начинается поиск назад - Возвращает:
- индекс последнего вхождения элемента на позиции, меньшей или равной, в этом списке; -1, если элемент не найден.
- Исключения:
-
IndexOutOfBoundsException- если указанный индекс больше или равен текущему размеру этого списка
clone
toArray
public Object[] toArray()
Возвращаемый массив будет «безопасным» в том смысле, что ссылки на него не поддерживаются этим списком. (Другими словами, этот метод должен выделить новый массив). Таким образом, вызывающий метод свободен изменять возвращаемый массив.
Этот метод служит мостом между основанными на массивах и основанными на коллекциях API.
toArray
public <T> T[] toArray(T[] a)
Если этот список помещается в указанный массив с некоторым избытком (т. е. массив имеет больше элементов, чем этот список), элемент в массиве, непосредственно следующий за концом списка, устанавливается в null. (Это полезно для определения длины этого списка *только* если вызывающий метод знает, что этот список не содержит null-элементов.)
Как и метод toArray(), этот метод служит мостом между основанными на массивах и основанными на коллекциях 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)
- Specified by:
-
retainAllin interfaceCollection<E> - Specified by:
-
retainAllin interfaceList<E> - Parameters:
-
c- коллекция, содержащая элементы, которые должны быть сохранены в этом списке - Returns:
-
true, если этот список изменился в результате вызова - Throws:
-
ClassCastException- если класс элемента этого списка несовместим с указанной коллекцией (необязательно) -
NullPointerException- если этот список содержит нулевой элемент, а указанная коллекция не допускает нулевых элементов (необязательно), или если указанная коллекция равна null - See Also:
addAllAbsent
public int addAllAbsent(Collection<? extends E> c)
- Parameters:
-
c- коллекция, содержащая элементы, которые нужно добавить в этот список - Returns:
- количество добавленных элементов
- Throws:
-
NullPointerException- если указанная коллекция равна null - See Also:
clear
addAll
public boolean addAll(Collection<? extends E> c)
- Specified by:
-
addAllin interfaceCollection<E> - Specified by:
-
addAllin interfaceList<E> - Parameters:
-
c- коллекция, содержащая элементы, которые нужно добавить в этот список - Returns:
-
true, если этот список изменился в результате вызова - Throws:
-
NullPointerException- если указанная коллекция равна null - See Also:
addAll
public boolean addAll(int index, Collection<? extends E> c)
- Specified by:
-
addAllin interfaceList<E> - Parameters:
-
index- индекс, с которого нужно вставить первый элемент из указанной коллекции -
c- коллекция, содержащая элементы, которые нужно добавить в этот список - Returns:
-
true, если этот список изменился в результате вызова - Throws:
-
IndexOutOfBoundsException- если индекс находится вне допустимого диапазона (index < 0 || index > size()) -
NullPointerException- если указанная коллекция равна null - See Also:
forEach
public void forEach(Consumer<? super E> action)
IterableIterable до тех пор, пока все элементы не будут обработаны или действие не выбросит исключение. Действия выполняются в порядке итерации, если этот порядок указан. Исключения, выброшенные действием, передаются вызывающей стороне. Поведение этого метода не определено, если действие выполняет побочные эффекты, которые изменяют исходный источник элементов, за исключением случаев, когда класс-преемник определил политику одновременного изменения.
- Specified by:
-
forEachin interfaceIterable<E> - Parameters:
-
action- Действие, которое должно быть выполнено для каждого элемента - Throws:
-
NullPointerException- если указанное действие равно null
removeIf
public boolean removeIf(Predicate<? super E> filter)
Collection- Specified by:
-
removeIfin interfaceCollection<E> - Parameters:
-
filter- предикат, возвращающийtrueдля удаляемых элементов - Returns:
-
true, если какие-либо элементы были удалены - Throws:
-
NullPointerException- если указанный фильтр равен null
toString
public String toString()
"[]"). Смежные элементы разделяются символами ", " (запятая и пробел). Элементы преобразуются в строки с помощью String.valueOf(Object).equals
public boolean equals(Object o)
true, если указанный объект является тем же объектом, что и этот объект, или если он также является списком и последовательность элементов, возвращаемых итератором указанного списка, совпадает с последовательностью, возвращаемой итератором этого списка. Две последовательности считаются одинаковыми, если у них одинаковая длина, и соответствующие элементы в одинаковых позициях в последовательности являются равными. Два элемента 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.
https://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/concurrent/CopyOnWriteArrayList.html