Spec-Zone.ru › OpenJDK 25

Класс CopyOnWriteArraySet<E>

java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractSet<E>
java.util.concurrent.CopyOnWriteArraySet<E>
Параметры типа:
E — тип элементов, хранящихся в этом множестве
Все реализуемые интерфейсы:
Serializable, Iterable<E>, Collection<E>, Set<E>
public class CopyOnWriteArraySet<E> extends AbstractSet<E> implements Serializable
Set, использующее внутренний CopyOnWriteArrayList для выполнения всех операций. Поэтому ему присущи те же основные свойства:
  • Лучше всего оно подходит для приложений, в которых размер множества обычно невелик, операции только для чтения значительно преобладают над изменяющими операциями и необходимо предотвращать взаимное влияние потоков во время обхода.
  • Оно является потокобезопасным.
  • Изменяющие операции (add, set, remove и т. д.) требуют значительных затрат, поскольку обычно подразумевают копирование всего базового массива.
  • Итераторы не поддерживают изменяющую операцию remove.
  • Обход с помощью итераторов выполняется быстро и не подвержен влиянию других потоков. Итераторы используют неизменяемые снимки массива, сделанные в момент их создания.

Пример использования. В следующем фрагменте кода используется множество с копированием при записи для хранения объектов Handler, выполняющих действия при обновлении состояния.

class Handler { void handle() { ... } }

class X {
  private final CopyOnWriteArraySet<Handler> handlers
    = new CopyOnWriteArraySet<>();
  public void addHandler(Handler h) { handlers.add(h); }

  private long internalState;
  private synchronized void changeState() { internalState = ...; }

  public void update() {
    changeState();
    for (Handler handler : handlers)
      handler.handle();
  }
}

Этот класс входит в состав Java Collections Framework.

Начиная с версии:
1.5
См. также:
  • CopyOnWriteArrayList
  • Сериализованная форма

Краткое описание конструкторов

Конструктор Описание
CopyOnWriteArraySet()
Создает пустое множество.
CopyOnWriteArraySet(Collection<? extends E> c)
Создает множество, содержащее все элементы указанной коллекции.

Краткое описание методов

Модификатор и тип Метод Описание
boolean add(E e)
Добавляет указанный элемент в это множество, если он еще не присутствует.
boolean addAll(Collection<? extends E> c)
Добавляет в это множество все элементы указанной коллекции, которых в нем еще нет.
void clear()
Удаляет все элементы из этого множества.
boolean contains(Object o)
Возвращает true, если это множество содержит указанный элемент.
boolean containsAll(Collection<?> c)
Возвращает true, если это множество содержит все элементы указанной коллекции.
boolean equals(Object o)
Сравнивает указанный объект с этим множеством на равенство.
void forEach(Consumer<? super E> action)
Выполняет заданное действие для каждого элемента Iterable, пока не будут обработаны все элементы или действие не вызовет исключение.
boolean isEmpty()
Возвращает true, если это множество не содержит элементов.
Iterator<E> iterator()
Возвращает итератор по элементам этого множества в порядке их добавления.
boolean remove(Object o)
Удаляет указанный элемент из этого множества, если он присутствует.
boolean removeAll(Collection<?> c)
Удаляет из этого множества все элементы, содержащиеся в указанной коллекции.
boolean removeIf(Predicate<? super E> filter)
Удаляет из этой коллекции все элементы, удовлетворяющие заданному предикату (необязательная операция).
boolean retainAll(Collection<?> c)
Оставляет в этом множестве только элементы, содержащиеся в указанной коллекции.
int size()
Возвращает количество элементов в этом множестве.
Spliterator<E> spliterator()
Возвращает Spliterator по элементам этого множества в порядке их добавления.
Object[] toArray()
Возвращает массив, содержащий все элементы этого множества.
<T> T[] toArray(T[] a)
Возвращает массив, содержащий все элементы этого множества; тип возвращаемого массива во время выполнения совпадает с типом указанного массива.

Методы, объявленные в классе AbstractSet

hashCode

Методы, объявленные в классе AbstractCollection

toString

Методы, объявленные в классе Object

clone, finalize, getClass, notify, notifyAll, wait, wait, wait

Методы, объявленные в интерфейсе Collection

parallelStream, stream, toArray

Подробное описание конструкторов

CopyOnWriteArraySet

public CopyOnWriteArraySet()
Создает пустое множество.

CopyOnWriteArraySet

public CopyOnWriteArraySet(Collection<? extends E> c)
Создает множество, содержащее все элементы указанной коллекции.
Параметры:
c — коллекция элементов, которые должны изначально содержаться в множестве
Исключения:
NullPointerException — если указанная коллекция равна null

Подробное описание методов

size

public int size()
Возвращает количество элементов в этом множестве.
Указан в:
size в интерфейсе Collection<E>
Указан в:
size в интерфейсе Set<E>
Возвращает:
количество элементов в этом множестве

isEmpty

public boolean isEmpty()
Возвращает true, если это множество не содержит элементов.
Указан в:
isEmpty в интерфейсе Collection<E>
Указан в:
isEmpty в интерфейсе Set<E>
Переопределяет:
isEmpty в классе AbstractCollection<E>
Возвращает:
true, если это множество не содержит элементов

contains

public boolean contains(Object o)
Возвращает true, если это множество содержит указанный элемент. Точнее, возвращает true тогда и только тогда, когда это множество содержит элемент e, для которого выполняется Objects.equals(o, e).
Указан в:
contains в интерфейсе Collection<E>
Указан в:
contains в интерфейсе Set<E>
Переопределяет:
contains в классе AbstractCollection<E>
Параметры:
o — элемент, наличие которого в этом множестве требуется проверить
Возвращает:
true, если это множество содержит указанный элемент

toArray

public Object[] toArray()
Возвращает массив, содержащий все элементы этого множества. Если это множество гарантирует определенный порядок возврата элементов итератором, данный метод должен возвращать элементы в том же порядке.

Возвращаемый массив является «безопасным»: это множество не хранит на него ссылок. (Иными словами, данный метод должен выделить новый массив, даже если это множество основано на массиве.) Таким образом, вызывающий код может свободно изменять возвращенный массив.

Этот метод служит связующим звеном между API на основе массивов и API на основе коллекций.

Указан в:
toArray в интерфейсе Collection<E>
Указан в:
toArray в интерфейсе Set<E>
Переопределяет:
toArray в классе AbstractCollection<E>
Возвращает:
массив, содержащий все элементы этого множества

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 в интерфейсе Set<E>
Переопределяет:
toArray в классе AbstractCollection<E>
Параметры типа:
T — тип компонентов массива, в котором будет храниться коллекция
Параметры:
a — массив, в который следует поместить элементы этого множества, если он достаточно велик; в противном случае для этой цели выделяется новый массив того же типа во время выполнения.
Возвращает:
массив, содержащий все элементы этого множества
Исключения:
ArrayStoreException — если тип указанного массива во время выполнения не является супертипом типа во время выполнения каждого элемента этого множества
NullPointerException — если указанный массив равен null

clear

public void clear()
Удаляет все элементы из этого множества. После возврата из этого вызова множество будет пустым.
Указан в:
clear в интерфейсе Collection<E>
Указан в:
clear в интерфейсе Set<E>
Переопределяет:
clear в классе AbstractCollection<E>

remove

public boolean remove(Object o)
Удаляет указанный элемент из этого множества, если он присутствует. Точнее, удаляет элемент e, для которого выполняется Objects.equals(o, e), если такой элемент содержится в этом множестве. Возвращает true, если множество содержало этот элемент (или, что равнозначно, если в результате вызова множество изменилось). (После возврата из вызова множество не будет содержать этот элемент.)
Указан в:
remove в интерфейсе Collection<E>
Указан в:
remove в интерфейсе Set<E>
Переопределяет:
remove в классе AbstractCollection<E>
Параметры:
o — объект, который нужно удалить из этого множества, если он присутствует
Возвращает:
true, если это множество содержало указанный элемент

add

public boolean add(E e)
Добавляет указанный элемент в это множество, если он еще не присутствует. Точнее, добавляет указанный элемент e в это множество, если множество не содержит элемента e2, для которого выполняется Objects.equals(e, e2). Если множество уже содержит этот элемент, вызов не изменяет множество и возвращает false.
Указан в:
add в интерфейсе Collection<E>
Указан в:
add в интерфейсе Set<E>
Переопределяет:
add в классе AbstractCollection<E>
Параметры:
e — элемент, который нужно добавить в это множество
Возвращает:
true, если это множество ранее не содержало указанный элемент

containsAll

public boolean containsAll(Collection<?> c)
Возвращает true, если это множество содержит все элементы указанной коллекции. Если указанная коллекция также является множеством, этот метод возвращает true, если она является подмножеством этого множества.
Указан в:
containsAll в интерфейсе Collection<E>
Указан в:
containsAll в интерфейсе Set<E>
Переопределяет:
containsAll в классе AbstractCollection<E>
Параметры:
c — коллекция, наличие элементов которой в этом множестве требуется проверить
Возвращает:
true, если это множество содержит все элементы указанной коллекции
Исключения:
NullPointerException — если указанная коллекция равна null
См. также:
  • contains(Object)

addAll

public boolean addAll(Collection<? extends E> c)
Добавляет в это множество все элементы указанной коллекции, которых в нем еще нет. Если указанная коллекция также является множеством, операция addAll фактически изменяет это множество так, что его значение становится объединением двух множеств. Поведение этой операции не определено, если указанная коллекция изменяется во время ее выполнения.
Указан в:
addAll в интерфейсе Collection<E>
Указан в:
addAll в интерфейсе Set<E>
Переопределяет:
addAll в классе AbstractCollection<E>
Параметры:
c — коллекция, содержащая элементы, которые нужно добавить в это множество
Возвращает:
true, если в результате вызова это множество изменилось
Исключения:
NullPointerException — если указанная коллекция равна null
См. также:
  • add(Object)

removeAll

public boolean removeAll(Collection<?> c)
Удаляет из этого множества все элементы, содержащиеся в указанной коллекции. Если указанная коллекция также является множеством, эта операция фактически изменяет это множество так, что его значение становится асимметрической разностью двух множеств.
Указан в:
removeAll в интерфейсе Collection<E>
Указан в:
removeAll в интерфейсе Set<E>
Переопределяет:
removeAll в классе AbstractSet<E>
Параметры:
c — коллекция, содержащая элементы, которые нужно удалить из этого множества
Возвращает:
true, если в результате вызова это множество изменилось
Исключения:
ClassCastException — если класс элемента этого множества несовместим с указанной коллекцией (необязательно)
NullPointerException — если это множество содержит элемент null, а указанная коллекция не допускает элементы null (необязательно), или если указанная коллекция равна null
См. также:
  • remove(Object)

retainAll

public boolean retainAll(Collection<?> c)
Оставляет в этом множестве только элементы, содержащиеся в указанной коллекции. Иными словами, удаляет из этого множества все элементы, не содержащиеся в указанной коллекции. Если указанная коллекция также является множеством, эта операция фактически изменяет это множество так, что его значение становится пересечением двух множеств.
Указан в:
retainAll в интерфейсе Collection<E>
Указан в:
retainAll в интерфейсе Set<E>
Переопределяет:
retainAll в классе AbstractCollection<E>
Параметры:
c — коллекция, содержащая элементы, которые нужно оставить в этом множестве
Возвращает:
true, если в результате вызова это множество изменилось
Исключения:
ClassCastException — если класс элемента этого множества несовместим с указанной коллекцией (необязательно)
NullPointerException — если это множество содержит элемент null, а указанная коллекция не допускает элементы null (необязательно), или если указанная коллекция равна null
См. также:
  • remove(Object)

iterator

public Iterator<E> iterator()
Возвращает итератор по элементам этого множества в порядке их добавления.

Возвращаемый итератор предоставляет снимок состояния множества на момент создания итератора. При обходе итератора синхронизация не требуется. Итератор НЕ поддерживает метод remove.

Указан в:
iterator в интерфейсе Collection<E>
Указан в:
iterator в интерфейсе Iterable<E>
Указан в:
iterator в интерфейсе Set<E>
Указан в:
iterator в классе AbstractCollection<E>
Возвращает:
итератор по элементам этого множества

equals

public boolean equals(Object o)
Сравнивает указанный объект с этим множеством на равенство. Возвращает true, если указанный объект является тем же объектом, что и этот объект, или если он также является Set, а элементы, возвращаемые итератором по указанному множеству, совпадают с элементами, возвращаемыми итератором по этому множеству. Точнее, считается, что два итератора возвращают одинаковые элементы, если они возвращают одинаковое количество элементов и для каждого элемента e1, возвращенного итератором по указанному множеству, существует элемент e2, возвращенный итератором по этому множеству, такой, что Objects.equals(e1, e2).
Указан в:
equals в интерфейсе Collection<E>
Указан в:
equals в интерфейсе Set<E>
Переопределяет:
equals в классе AbstractSet<E>
Параметры:
o — объект, который требуется сравнить на равенство с этим множеством
Возвращает:
true, если указанный объект равен этому множеству
См. также:
  • Object.equals(Object)
  • Set.equals(Object)
  • List.equals(Object)

removeIf

public boolean removeIf(Predicate<? super E> filter)
Описание скопировано из интерфейса: Collection
Удаляет из этой коллекции все элементы, удовлетворяющие заданному предикату (необязательная операция). Ошибки или исключения времени выполнения, возникающие во время итерации или при вычислении предиката, передаются вызывающему коду.
Указан в:
removeIf в интерфейсе Collection<E>
Параметры:
filter — предикат, возвращающий true для элементов, подлежащих удалению
Возвращает:
true, если были удалены какие-либо элементы
Исключения:
NullPointerException — если указанный фильтр равен null

forEach

public void forEach(Consumer<? super E> action)
Описание скопировано из интерфейса: Iterable
Выполняет заданное действие для каждого элемента Iterable, пока не будут обработаны все элементы или действие не вызовет исключение. Если порядок итерации определен, действия выполняются в этом порядке. Исключения, вызванные действием, передаются вызывающему коду.

Поведение этого метода не определено, если действие выполняет побочные эффекты, изменяющие базовый источник элементов, за исключением случаев, когда переопределяющий класс определяет политику конкурентной модификации.

Указан в:
forEach в интерфейсе Iterable<E>
Параметры:
action — действие, выполняемое для каждого элемента
Исключения:
NullPointerException — если указанное действие равно null

spliterator

public Spliterator<E> spliterator()
Возвращает Spliterator по элементам этого множества в порядке их добавления.

Объект Spliterator сообщает о характеристиках Spliterator.IMMUTABLE, Spliterator.DISTINCT, Spliterator.SIZED и Spliterator.SUBSIZED.

Сплитератор предоставляет снимок состояния множества на момент его создания. При работе со сплитератором синхронизация не требуется.

Указан в:
spliterator в интерфейсе Collection<E>
Указан в:
spliterator в интерфейсе Iterable<E>
Указан в:
spliterator в интерфейсе Set<E>
Возвращает:
Spliterator по элементам этого множества
Начиная с версии:
1.8

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и работающие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/concurrent/CopyOnWriteArraySet.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API