Spec-Zone.ru › OpenJDK 8

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

A Set использующий внутренний CopyOnWriteArrayList для всех своих операций. Таким образом, он разделяет те же основные свойства:

  • Он наилучшим образом подходит для приложений, в которых размер наборов, как правило, остаётся небольшим, операций чтения значительно больше, чем операций изменения, и вам необходимо предотвратить взаимное влияние потоков во время обхода.
  • Он потокобезопасен.
  • Операции изменения (add, set, remove, и т. д.) являются дорогостоящими, поскольку обычно они предполагают копирование всего базового массива.
  • Итераторы не поддерживают операцию изменения remove.
  • Обход с помощью итераторов быстрый и не может столкнуться с помехами от других потоков. Итераторы полагаются на неизменные снимки массива на момент создания итераторов.

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

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

 class X {
   private final CopyOnWriteArraySet<Handler> handlers
     = new CopyOnWriteArraySet<Handler>();
   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

Конструкторы

CopyOnWriteArraySet

public CopyOnWriteArraySet()

Создаёт пустое множество.

CopyOnWriteArraySet

public CopyOnWriteArraySet(Collection<? extends E> c)

Создаёт множество, содержащее все элементы указанного набора.

Параметры:
c - набор элементов, которые должны быть изначально включены
Исключения:
NullPointerException - если указанный набор равен null

Методы

size

public int size()

Возвращает количество элементов в этом множестве.

Унаследованно от:
size в интерфейсе Collection<E>
Унаследованно от:
size в интерфейсе Set<E>
Унаследованно от:
size в классе AbstractCollection<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`, такой что `o.equals(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`. (Это полезно для определения длины этого множества *только* если вызывающий метод знает, что это множество не содержит `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`, такой что `o.equals(e)`, если это множество содержит такой элемент. Возвращает `true`, если это множество содержало элемент (или, эквивалентно, если это множество изменилось в результате вызова). (Это множество не будет содержать элемент после возвращения вызова.)

Унаследованно от:
remove в интерфейсе Collection<E>
Унаследованно от:
remove в интерфейсе Set<E>
Переопределяет:
remove в классе AbstractCollection<E>
Параметры:
o - объект, который нужно удалить из этого множества, если он присутствует
Возвращает:
`true` если это множество содержало указанный элемент

add

public boolean add(E e)

Добавляет указанный элемент в это множество, если он ещё не присутствует. Более формально, добавляет указанный элемент `e` в это множество, если множество не содержит элемент `e`, такой что `o.equals(e)`. Если это множество уже содержит элемент, вызов оставляет множество неизменным и возвращает `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 в интерфейсе 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
См. также:
remove(Object)

iterator

public Iterator<E> iterator()

Возвращает итератор по элементам, содержащимся в этом наборе в порядке добавления этих элементов.

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

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

equals

public boolean equals(Object o)

Сравнивает указанный объект с этим набором на равенство. Возвращает true, если указанный объект является тем же объектом, что и этот объект, или если он также является Set и элементы, возвращаемые итератором над указанным набором, такие же, как элементы, возвращаемые итератором над этим набором. Более формально, два итератора считаются возвращающими одни и те же элементы, если они возвращают одинаковое количество элементов и для каждого элемента e1, возвращаемого итератором над указанным набором, существует элемент e2, возвращаемый итератором над этим набором, такой что (e1==null ? e2==null : e1.equals(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, если какие-либо элементы были удалены

forEach

public void forEach(Consumer<? super E> action)

Описание скопировано из интерфейса: Iterable

Выполняет заданное действие для каждого элемента Iterable до тех пор, пока все элементы не будут обработаны или действие не выбросит исключение. За исключением случаев, специально оговоренных в реализующем классе, действия выполняются в порядке итерации (если порядок итерации указан). Исключение, выброшенное действием, передаётся вызывающему методу.

Определено в:
forEach в интерфейсе Iterable<E>
Параметры:
action — действие, которое нужно выполнить для каждого элемента

spliterator

public Spliterator<E> spliterator()

Возвращает Spliterator по элементам в этом наборе в порядке добавления этих элементов.

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

Итератор предоставляет моментальную фотографию состояния набора в момент построения итератора. Синхронизация не требуется при работе с итератором.

Определено в:
spliterator в интерфейсе Iterable<E>
Определено в:
spliterator в интерфейсе Collection<E>
Определено в:
spliterator в интерфейсе Set<E>
Возвращает:
Spliterator по элементам в этом наборе
C:
1.8

© 1993, 2020, 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