Spec-Zone.ru › OpenJDK 27

Класс 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
Модификатор и тип Метод Описание
int hashCode()
Возвращает значение хеш-кода этого множества.

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

toString
Модификатор и тип Метод Описание
String toString()
Возвращает строковое представление этой коллекции.

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

clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создает и возвращает копию этого объекта.
protected void finalize()
Устарело, будет удалено: этот элемент API подлежит удалению в будущей версии.
Финализация объявлена устаревшей и будет удалена в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс Object во время выполнения.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt, либо до истечения заданного промежутка реального времени.

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

parallelStream, stream, toArray
Модификатор и тип Метод Описание
default Stream<E> parallelStream()
Возвращает, возможно, параллельный Stream, источником которого является эта коллекция.
default Stream<E> stream()
Возвращает последовательный Stream, источником которого является эта коллекция.
default <T> T[] toArray(IntFunction<T[]> generator)
Возвращает массив, содержащий все элементы этой коллекции; для выделения возвращаемого массива используется предоставленная функция generator.

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

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, 2026, 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.

Spec-Zone.ru

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