Spec-Zone.ru › OpenJDK 17

Класс CopyOnWriteArraySet<E>

java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractSet<E>
java.util.concurrent.CopyOnWriteArraySet<E>
Type Parameters:
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.

С момента:
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)
Возвращает массив, содержащий все элементы этого множества; тип возвращаемого массива соответствует указанному массиву.

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

hashCode

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

toString

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

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

Методы, объявленные в интерфейсе java.util.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, если и только если это множество содержит элемент, для которого выполняется условие.
Определено в:
contains в интерфейсе Collection<E>
Определено в:
contains в интерфейсе Set<E>
Переопределяет:
contains в классе AbstractCollection<E>
Параметры:
o - элемент, наличие которого в этом множестве необходимо проверить
Возвращает:
true, если это множество содержит указанный элемент

toArray

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

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

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

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

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 в интерфейсе 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)
Удаляет указанный элемент из этого множества, если он присутствует. Более формально, удаляет элемент, для которого выполняется условие.
Определено в:
remove в интерфейсе Collection<E>
Определено в:
remove в интерфейсе Set<E>
Переопределяет:
remove в классе AbstractCollection<E>
Параметры:
o - элемент, который нужно удалить из этого множества, если он присутствует
Возвращает:
true, если это множество содержало указанный элемент

add

public boolean add(E e)
Добавляет указанный элемент в это множество, если он ещё не присутствует. Более формально, добавляет указанный элемент в это множество, если множество не содержит элемент, для которого выполняется условие.
Определено в:
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 в интерфейсе Collection<E>
Определено в:
addAll в интерфейсе Set<E>
Переопределяет:
addAll в классе AbstractCollection<E>
Параметры:
c - коллекция, содержащая элементы, которые нужно добавить в это множество
Возвращает:
true, если это множество изменилось в результате вызова
Исключения:
NullPointerException - если указанная коллекция равна null
См. также:
  • add(Object)

removeAll

public boolean removeAll(Collection<?> c)
Удаляет из этого множества все элементы, содержащиеся в указанной коллекции. Если указанная коллекция также является множеством, эта операция эффективно изменяет это множество так, что его значение является симметричной разностью двух множеств.
Specified by:
removeAll в интерфейсе Collection<E>
Specified by:
removeAll в интерфейсе Set<E>
Overrides:
removeAll в классе AbstractSet<E>
Parameters:
c - коллекция, содержащая элементы, которые нужно удалить из этого множества
Returns:
true если это множество изменилось в результате вызова
Throws:
ClassCastException - если класс элемента этого множества несовместим с указанной коллекцией (необязательно)
NullPointerException - если это множество содержит нулевой элемент, а указанная коллекция не допускает нулевых элементов (необязательно), или если указанная коллекция равна null
See Also:
  • remove(Object)

retainAll

public boolean retainAll(Collection<?> c)
Сохраняет только элементы в этом множестве, которые содержатся в указанной коллекции. Другими словами, удаляет из этого множества все элементы, которые не содержатся в указанной коллекции. Если указанная коллекция также является множеством, эта операция эффективно изменяет это множество так, что его значение является пересечением двух множеств.
Specified by:
retainAll в интерфейсе Collection<E>
Specified by:
retainAll в интерфейсе Set<E>
Overrides:
retainAll в классе AbstractCollection<E>
Parameters:
c - коллекция, содержащая элементы, которые нужно сохранить в этом множестве
Returns:
true если это множество изменилось в результате вызова
Throws:
ClassCastException - если класс элемента этого множества несовместим с указанной коллекцией (необязательно)
NullPointerException - если это множество содержит нулевой элемент, а указанная коллекция не допускает нулевых элементов (необязательно), или если указанная коллекция равна null
See Also:
  • remove(Object)

iterator

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

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

Specified by:
iterator в интерфейсе Collection<E>
Specified by:
iterator в интерфейсе Iterable<E>
Specified by:
iterator в интерфейсе Set<E>
Specified by:
iterator в классе AbstractCollection<E>
Returns:
итератор по элементам в этом множестве

equals

public boolean equals(Object o)
Сравнивает указанный объект с этим множеством на равенство. Возвращает true если указанный объект является тем же объектом, что и этот объект, или если он также является Set и элементы, возвращаемые итератором над указанным множеством, совпадают с элементами, возвращаемыми итератором над этим множеством. Более формально, два итератора считаются возвращающими одинаковые элементы, если они возвращают одинаковое количество элементов, и для каждого элемента e1 возвращаемого итератором над указанным множеством, существует элемент e2 возвращаемый итератором над этим множеством, таким, что Objects.equals(e1, e2).
Specified by:
equals в интерфейсе Collection<E>
Specified by:
equals в интерфейсе Set<E>
Overrides:
equals в классе AbstractSet<E>
Parameters:
o - объект, подлежащий сравнению на равенство с этим множеством
Returns:
true если указанный объект равен этому множеству
See Also:
  • Object.hashCode()
  • HashMap

removeIf

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

forEach

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

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

Specified by:
forEach в интерфейсе Iterable<E>
Parameters:
action - Действие, которое должно быть выполнено для каждого элемента
Throws:
NullPointerException - если указанное действие равно null

spliterator

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

Spliterator сообщает Spliterator.IMMUTABLE, Spliterator.DISTINCT, Spliterator.SIZED и Spliterator.SUBSIZED.

Итератор предоставляет моментальную копию состояния множества на момент создания итератора. Нет необходимости в синхронизации во время работы с итератором.

Specified by:
spliterator в интерфейсе Collection<E>
Specified by:
spliterator в интерфейсе Iterable<E>
Specified by:
spliterator в интерфейсе Set<E>
Returns:
Spliterator по элементам в этом множестве
Since:
1.8

© 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/CopyOnWriteArraySet.html

Spec-Zone.ru

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