Класс 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.
- С тех пор:
- 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) | Возвращает |
boolean | containsAll(Collection<?> c) | Возвращает |
boolean | equals(Object o) | Сравнивает указанный объект с этим набором на равенство. |
void | forEach(Consumer<? super E> action) | Выполняет заданное действие для каждого элемента |
boolean | isEmpty() | Возвращает |
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() | Возвращает |
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> - Возвращает:
Spliteratorпо элементам в этом наборе- С:
- 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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/CopyOnWriteArraySet.html