Spec-Zone.ru › OpenJDK 21

Класс 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 Framework.

Since:
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, если и только если это множество содержит элемент e, такой что Objects.equals(o, e).
Унаследовано от:
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. (Это полезно для определения длины этого множества *только* если вызывающая сторона знает, что это множество не содержит никаких нулевых элементов.)

Если это множество гарантирует порядок возвращаемых элементов итератором, этот метод должен возвращать элементы в том же порядке.

Как и метод 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)
Удаляет указанный элемент из этого множества, если он присутствует. Более формально, удаляет элемент 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
См. также:
  • remove(Object)

retainAll

public boolean retainAll(Collection<?> c)
Сохраняет только элементы в этом наборе, которые содержатся в заданном наборе. Другими словами, удаляет из этого набора все его элементы, которые не содержатся в заданном наборе. Если заданный набор также является множеством, эта операция фактически изменяет этот набор таким образом, что его значение представляет собой пересечение двух множеств.
Указано в:
retainAll в интерфейсе Collection<E>
Указано в:
retainAll в интерфейсе Set<E>
Переопределяет:
retainAll в классе AbstractCollection<E>
Параметры:
c - набор, содержащий элементы, которые должны быть сохранены в этом наборе
Возвращает:
true если этот набор был изменён в результате вызова
Исключения:
ClassCastException - если класс элемента этого набора несовместим с заданным набором (необязательно)
NullPointerException - если этот набор содержит нулевой элемент, а заданный набор не допускает нулевые элементы (необязательно), или если заданный набор равен 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.hashCode()
  • HashMap

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>
Возвращает:
итератор по элементам в этом наборе
С тех пор:
1.8

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

Spec-Zone.ru

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