Spec-Zone.ru › OpenJDK 24

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

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

retainAll

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

iterator

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

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

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

equals

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

removeIf

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

forEach

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

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

Specified by:
forEach in interface 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 in interface Collection<E>
Specified by:
spliterator in interface Iterable<E>
Specified by:
spliterator in interface Set<E>
Returns:
Spliterator по элементам в этом множестве
Since:
1.8

© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/concurrent/CopyOnWriteArraySet.html

Spec-Zone.ru

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