Класс CopyOnWriteArrayList<E>
- Type Parameters:
-
E- тип элементов, хранящихся в этом списке
- All Implemented Interfaces:
-
Serializable,Cloneable,Iterable<E>,Collection<E>,List<E>,RandomAccess
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 |
Добавляет все элементы из указанной коллекции, которые ещё не содержатся в этом списке, в конец этого списка в порядке, в котором они возвращаются итератором указанной коллекции. |
boolean |
addIfAbsent |
Добавляет элемент, если он отсутствует. |
void |
clear() |
Удаляет все элементы из этого списка. |
Object |
clone() |
Возвращает поверхностную копию этого списка. |
boolean |
contains |
Возвращает true, если этот список содержит указанный элемент. |
boolean |
containsAll |
Возвращает true, если этот список содержит все элементы указанной коллекции. |
boolean |
equals |
Сравнивает указанный объект с этим списком на равенство. |
void |
forEach |
Выполняет заданное действие для каждого элемента Iterable до тех пор, пока все элементы не будут обработаны или действие не выбросит исключение. |
E |
get |
Возвращает элемент в указанной позиции в этом списке. |
int |
hashCode() |
Возвращает значение хэш-кода для этого списка. |
int |
indexOf |
Возвращает индекс первого вхождения указанного элемента в этом списке, выполняя поиск вперёд с index, или возвращает -1, если элемент не найден. |
int |
indexOf |
Возвращает индекс первого вхождения указанного элемента в этом списке или -1, если этот список не содержит элемент. |
boolean |
isEmpty() |
Возвращает true, если этот список не содержит элементов. |
Iterator<E> |
iterator() |
Возвращает итератор по элементам в этом списке в правильной последовательности. |
int |
lastIndexOf |
Возвращает индекс последнего вхождения указанного элемента в этом списке, выполняя поиск назад с index, или возвращает -1, если элемент не найден. |
int |
lastIndexOf |
Возвращает индекс последнего вхождения указанного элемента в этом списке, или -1, если этот список не содержит элемент. |
ListIterator<E> |
listIterator() |
Возвращает итератор списка по элементам в этом списке (в правильной последовательности). |
ListIterator<E> |
listIterator |
Возвращает итератор списка по элементам в этом списке (в правильной последовательности), начиная с указанной позиции в списке. |
E |
remove |
Удаляет элемент в указанной позиции в этом списке. |
boolean |
remove |
Удаляет первое вхождение указанного элемента из этого списка, если он присутствует. |
boolean |
removeAll |
Удаляет из этого списка все его элементы, которые содержатся в указанной коллекции. |
boolean |
removeIf |
Удаляет все элементы этой коллекции, которые удовлетворяют заданному предикату. |
boolean |
retainAll |
Оставляет только элементы в этом списке, которые содержатся в указанной коллекции. |
E |
set |
Заменяет элемент в указанной позиции в этом списке указанным элементом. |
int |
size() |
Возвращает количество элементов в этом списке. |
Spliterator<E> |
spliterator() |
Возвращает Spliterator по элементам в этом списке. |
List<E> |
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())
set
public E set(int index, E element)
- Определено в:
-
setв интерфейсеList<E> - Параметры:
-
index- индекс заменяемого элемента -
element- элемент, который нужно сохранить по указанному индексу - Возвращает:
- элемент, который был ранее по указанному индексу
- Исключения:
-
IndexOutOfBoundsException- если индекс вне диапазона (index < 0 || index >= size())
add
public boolean add(E e)
- Specified by:
-
addв интерфейсеCollection<E> - Specified by:
-
addв интерфейсеList<E> - Parameters:
-
e- элемент, который нужно добавить в этот список - Returns:
-
true(как указано вCollection.add(E))
add
public void add(int index, E element)
- Specified by:
-
addв интерфейсеList<E> - Parameters:
-
index- индекс, в который нужно вставить указанный элемент -
element- элемент, который нужно вставить - Throws:
-
IndexOutOfBoundsException- если индекс выходит за пределы диапазона (index < 0 || index > size())
remove
public E remove(int index)
- Specified by:
-
removeв интерфейсеList<E> - Parameters:
-
index- индекс элемента, который нужно удалить - Returns:
- элемент, который ранее находился в указанной позиции
- Throws:
-
IndexOutOfBoundsException- если индекс выходит за пределы диапазона (index < 0 || index >= size())
remove
public boolean remove(Object o)
i таким, что Objects.equals(o, get(i)) (если такой элемент существует). Возвращает true , если в этом списке был указанный элемент (или, эквивалентно, если список изменился в результате вызова).- Specified by:
-
removeв интерфейсеCollection<E> - Specified by:
-
removeв интерфейсеList<E> - Parameters:
-
o- элемент, который нужно удалить из этого списка, если он присутствует - Returns:
-
trueесли в этом списке был указанный элемент
addIfAbsent
public boolean addIfAbsent(E e)
- Parameters:
-
e- элемент, который нужно добавить в этот список, если он отсутствует - Returns:
-
trueесли элемент был добавлен
containsAll
public boolean containsAll(Collection<?> c)
true , если этот список содержит все элементы указанного набора.- Specified by:
-
containsAllв интерфейсеCollection<E> - Specified by:
-
containsAllв интерфейсеList<E> - Parameters:
-
c- набор, для проверки на включение элементов в этот список - Returns:
-
trueесли этот список содержит все элементы указанного набора - Throws:
-
NullPointerException- если указанный набор равен null - See Also:
removeAll
public boolean removeAll(Collection<?> c)
- Specified by:
-
removeAllв интерфейсеCollection<E> - Specified by:
-
removeAllв интерфейсеList<E> - Parameters:
-
c- набор, содержащий элементы, которые нужно удалить из этого списка - Returns:
-
trueесли этот список изменился в результате вызова - Throws:
-
ClassCastException- если класс элемента этого списка несовместим с указанным набором (необязательно) -
NullPointerException- если этот список содержит null-элемент, а указанный набор не допускает null-элементов (необязательно), или если указанный набор равен null - See Also:
retainAll
public boolean retainAll(Collection<?> c)
- Specified by:
-
retainAllв интерфейсеCollection<E> - Specified by:
-
retainAllв интерфейсеList<E> - Parameters:
-
c- набор, содержащий элементы, которые нужно сохранить в этом списке - Returns:
-
trueесли этот список изменился в результате вызова - Throws:
-
ClassCastException- если класс элемента этого списка несовместим с указанным набором (необязательно) -
NullPointerException- если этот список содержит null-элемент, а указанный набор не допускает null-элементов (необязательно), или если указанный набор равен null - See Also:
addAllAbsent
public int addAllAbsent(Collection<? extends E> c)
- Parameters:
-
c- набор, содержащий элементы, которые нужно добавить в этот список - Returns:
- количество добавленных элементов
- Throws:
-
NullPointerException- если указанный набор равен null - See Also:
clear
public void clear()
- Specified by:
-
clearв интерфейсеCollection<E> - Specified by:
-
clearв интерфейсеList<E>
addAll
public boolean addAll(Collection<? extends E> c)
- Specified by:
-
addAllв интерфейсеCollection<E> - Specified by:
-
addAllв интерфейсеList<E> - Parameters:
-
c- набор, содержащий элементы, которые нужно добавить в этот список - Returns:
-
trueесли этот список изменился в результате вызова - Throws:
-
NullPointerException- если указанный набор равен null - See Also:
addAll
public boolean addAll(int index, Collection<? extends E> c)
- Specified by:
-
addAllв интерфейсеList<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:
-
forEachв интерфейсеIterable<E> - Parameters:
-
action- действие, которое нужно выполнить для каждого элемента - Throws:
-
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в интерфейсе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)
© 1993, 2021, 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/17/docs/api/java.base/java/util/concurrent/CopyOnWriteArrayList.html