Класс 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 Collections Framework.
- Since:
- 1.5
- See Also:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
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
public int size()
- Указано в:
-
sizeв интерфейсеCollection<E> - Указано в:
-
sizeв интерфейсеList<E> - Возвращает:
- количество элементов в этом списке
isEmpty
public boolean isEmpty()
true если этот список не содержит элементов.- Указано в:
-
isEmptyв интерфейсеCollection<E> - Указано в:
-
isEmptyв интерфейсеList<E> - Возвращает:
-
trueесли этот список не содержит элементов
contains
public boolean contains(Object o)
true если этот список содержит указанный элемент. Более формально, возвращает true тогда и только тогда, когда этот список содержит хотя бы один элемент e такой, что Objects.equals(o, e).- Указано в:
-
containsв интерфейсеCollection<E> - Указано в:
-
containsв интерфейсеList<E> - Параметры:
-
o- элемент, наличие которого в этом списке необходимо проверить - Возвращает:
-
trueесли этот список содержит указанный элемент
indexOf
public int indexOf(Object o)
i такой, что Objects.equals(o, get(i)), или -1, если такого индекса нет.- Указано в:
-
indexOfв интерфейсеList<E> - Параметры:
-
o- элемент для поиска - Возвращает:
- индекс первого вхождения указанного элемента в этом списке, или -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
public Object clone()
- Переопределяет:
-
cloneв классеObject - Возвращает:
- клон этого списка
- См. также:
toArray
public Object[] toArray()
Возвращаемый массив будет "безопасным" в том смысле, что никакие ссылки на него не поддерживаются этим списком. (Другими словами, этот метод должен выделить новый массив). Таким образом, вызывающий абонент может свободно изменять возвращаемый массив.
Этот метод выступает в качестве моста между API на основе массивов и API на основе коллекций.
- Указано в:
-
toArrayв интерфейсеCollection<E> - Указано в:
-
toArrayв интерфейсеList<E> - Возвращает:
- массив, содержащий все элементы в этом списке
- См. также:
toArray
public <T> T[] toArray(T[] a)
Если этот список помещается в указанный массив с запасом места (т. е. массив имеет больше элементов, чем этот список), элемент в массиве, непосредственно следующий за концом списка, устанавливается в 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)
- Указано в:
-
addFirstв интерфейсеList<E> - Указано в:
-
addFirstв интерфейсеSequencedCollection<E> - Параметры:
-
e- элемент, который нужно добавить - С:
- 21
addLast
public void addLast(E e)
- Указано в:
-
addLastв интерфейсеList<E> - Указано в:
-
addLastв интерфейсеSequencedCollection<E> - Параметры:
-
e- добавляемый элемент. - С:
- 21
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 если этот список содержал указанный элемент (или эквивалентно, если этот список изменился в результате вызова).- Указано в:
-
removeв интерфейсеCollection<E> - Указано в:
-
removeв интерфейсеList<E> - Параметры:
-
o- элемент, который нужно удалить из этого списка, если он присутствует - Возвращает:
-
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
public void clear()
- Указано в:
-
clearв интерфейсеCollection<E> - Указано в:
-
clearв интерфейсеList<E>
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).- Переопределяет:
-
toStringв классеObject - Возвращает:
- строковое представление этого списка
equals
public boolean equals(Object o)
true если указанный объект является тем же объектом, что и этот объект, или если он также является List и последовательность элементов, возвращаемых итератором указанного списка, совпадает с последовательностью, возвращаемой итератором этого списка. Две последовательности считаются одинаковыми, если у них одинаковая длина и соответствующие элементы в одинаковых позициях в последовательности равны. Два элемента e1 и e2 считаются равными, если Objects.equals(e1, e2).- Указано в:
-
equalsв интерфейсеCollection<E> - Указано в:
-
equalsв интерфейсеList<E> - Переопределяет:
-
equalsв классеObject - Параметры:
-
o- объект, который необходимо сравнить на равенство с этим списком - Возвращает:
-
trueесли указанный объект равен этому списку - См. также:
hashCode
public int hashCode()
Это реализация использует определение в List.hashCode().
- Указано в:
-
hashCodeв интерфейсеCollection<E> - Указано в:
-
hashCodeв интерфейсеList<E> - Переопределяет:
-
hashCodeв классеObject - Возвращает:
- значение хэш-кода для этого списка
- См. также:
iterator
public Iterator<E> iterator()
Возвращаемый итератор предоставляет моментальный снимок состояния списка в момент создания итератора. Синхронизация не требуется во время перебора итератора. Итератор НЕ поддерживает метод remove.
- Указано в:
-
iteratorв интерфейсеCollection<E> - Указано в:
-
iteratorв интерфейсеIterable<E> - Указано в:
-
iteratorв интерфейсеList<E> - Возвращает:
- итератор по элементам в этом списке в правильном порядке
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 предоставляет моментальную фотографию состояния списка на момент создания spliterator. При работе со spliterator синхронизация не требуется.
- Specified by:
-
spliteratorв интерфейсеCollection<E> - Specified by:
-
spliteratorв интерфейсеIterable<E> - Specified by:
-
spliteratorв интерфейсеList<E> - Returns:
Spliteratorнад элементами в этом списке- Since:
- 1.8
subList
public List<E> subList(int fromIndex, int toIndex)
fromIndex, включительно, и toIndex, не включительно. Возвращаемый список поддерживается этим списком, поэтому изменения в возвращаемом списке отражаются в этом списке. Семантика списка, возвращаемого этим методом, становится неопределенной, если базовый список (то есть этот список) изменяется каким-либо образом, кроме как через возвращаемый список.
- Specified by:
-
subListв интерфейсеList<E> - Parameters:
-
fromIndex- нижняя граница (включительно) подсписка -
toIndex- верхняя граница (не включительно) подсписка - Returns:
- представление указанного диапазона в этом списке
- Throws:
-
IndexOutOfBoundsException- для некорректного индекса конечной точки (fromIndex < 0 || toIndex > size || fromIndex > toIndex)
reversed
public List<E> reversed()
Изменения в представлении в обратном порядке разрешены и будут проецироваться на этот список. Кроме того, изменения в этом списке будут видны в представлении в обратном порядке. Подсписки и итераторы представления в обратном порядке имеют те же ограничения, что и этот список.
- Specified by:
-
reversedв интерфейсеList<E> - Specified by:
-
reversedв интерфейсеSequencedCollection<E> - Returns:
- представление этого набора в обратном порядке, как
List - Since:
- 21
© 1993, 2023, 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://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/concurrent/CopyOnWriteArrayList.html