Класс 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
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
CopyOnWriteArraySet() |
Создает пустое множество. |
CopyOnWriteArraySet |
Создает множество, содержащее все элементы указанной коллекции. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
add |
Добавляет указанный элемент в это множество, если он еще не содержится в нем. |
boolean |
addAll |
Добавляет все элементы указанной коллекции в это множество, если они еще не содержатся в нем. |
void |
clear() |
Удаляет все элементы из этого множества. |
boolean |
contains |
Возвращает true, если это множество содержит указанный элемент. |
boolean |
containsAll |
Возвращает true, если это множество содержит все элементы указанной коллекции. |
boolean |
equals |
Сравнивает указанный объект с этим множеством на равенство. |
void |
forEach |
Выполняет заданное действие для каждого элемента Iterable, пока не будут обработаны все элементы или действие не вызовет исключение. |
boolean |
isEmpty() |
Возвращает true, если это множество не содержит элементов. |
Iterator |
iterator() |
Возвращает итератор по элементам этого множества в порядке их добавления. |
boolean |
remove |
Удаляет указанный элемент из этого множества, если он в нем содержится. |
boolean |
removeAll |
Удаляет из этого множества все элементы, содержащиеся в указанной коллекции. |
boolean |
removeIf |
Удаляет из этой коллекции все элементы, удовлетворяющие заданному предикату (необязательная операция). |
boolean |
retainAll |
Оставляет в этом множестве только те элементы, которые содержатся в указанной коллекции. |
int |
size() |
Возвращает количество элементов в этом множестве. |
Spliterator |
spliterator() |
Возвращает Spliterator по элементам этого множества в порядке их добавления. |
Object[] |
toArray() |
Возвращает массив, содержащий все элементы этого множества. |
<T> T[] |
toArray |
Возвращает массив, содержащий все элементы этого множества; тип возвращаемого массива во время выполнения совпадает с типом указанного массива. |
Методы, объявленные в классе AbstractSet
hashCode | Модификатор и тип | Метод | Описание |
|---|---|---|
int |
hashCode() |
Возвращает значение хеш-кода этого множества. |
Методы, объявленные в классе AbstractCollection
toString | Модификатор и тип | Метод | Описание |
|---|---|---|
String |
toString() |
Возвращает строковое представление этой коллекции. |
Методы, объявленные в классе Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создает и возвращает копию этого объекта. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API подлежит удалению в будущей версии. Финализация объявлена устаревшей и будет удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс Object во время выполнения. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt, либо до истечения заданного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt, либо до истечения заданного промежутка реального времени. |
Методы, объявленные в интерфейсе Collection
parallelStream, stream, toArray | Модификатор и тип | Метод | Описание |
|---|---|---|
default Stream |
parallelStream() |
Возвращает, возможно, параллельный Stream, источником которого является эта коллекция. |
default Stream |
stream() |
Возвращает последовательный Stream, источником которого является эта коллекция. |
default <T> T[] |
toArray |
Возвращает массив, содержащий все элементы этой коллекции; для выделения возвращаемого массива используется предоставленная функция generator. |
Подробное описание конструкторов
CopyOnWriteArraySet
public CopyOnWriteArraySet()
CopyOnWriteArraySet
public CopyOnWriteArraySet(Collection<? extends E> c)
- Параметры:
-
c— коллекция элементов, которые должны изначально содержаться в множестве - Исключения:
-
NullPointerException— если указанная коллекция равна null
Подробное описание методов
size
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, основанными на массивах, и API, основанными на коллекциях.
- Указан в:
-
toArrayв интерфейсеCollection<E> - Указан в:
-
toArrayв интерфейсеSet<E> - Переопределяет:
-
toArrayв классеAbstractCollection<E> - Возвращает:
- массив, содержащий все элементы этого множества
toArray
public <T> T[] toArray(T[] a)
Если множество помещается в указанный массив с запасом (то есть массив содержит больше элементов, чем это множество), элемент массива, расположенный сразу после конца множества, устанавливается в null. (Это полезно для определения длины этого множества только в том случае, если вызывающий код знает, что множество не содержит элементов null.)
Если это множество гарантирует определенный порядок возврата элементов итератором, этот метод должен возвращать элементы в том же порядке.
Как и метод toArray(), этот метод служит связующим звеном между API, основанными на массивах, и 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 - См. также:
addAll
public boolean addAll(Collection<? extends E> c)
addAll фактически изменяет это множество так, что его значением становится объединение двух множеств. Поведение этой операции не определено, если указанная коллекция изменяется во время ее выполнения.- Указан в:
-
addAllв интерфейсеCollection<E> - Указан в:
-
addAllв интерфейсеSet<E> - Переопределяет:
-
addAllв классеAbstractCollection<E> - Параметры:
-
c— коллекция, содержащая элементы, которые следует добавить в это множество - Возвращает:
-
true, если это множество изменилось в результате вызова - Исключения:
-
NullPointerException— если указанная коллекция равна null - См. также:
removeAll
public boolean removeAll(Collection<?> c)
- Указан в:
-
removeAllв интерфейсеCollection<E> - Указан в:
-
removeAllв интерфейсеSet<E> - Переопределяет:
-
removeAllв классеAbstractSet<E> - Параметры:
-
c— коллекция, содержащая элементы, которые следует удалить из этого множества - Возвращает:
-
true, если это множество изменилось в результате вызова - Исключения:
-
ClassCastException— если класс элемента этого множества несовместим с указанной коллекцией (необязательное ограничение) -
NullPointerException— если это множество содержит элемент null, а указанная коллекция не допускает элементы null (необязательное ограничение), или если указанная коллекция равна null - См. также:
retainAll
public boolean retainAll(Collection<?> c)
- Указан в:
-
retainAllв интерфейсеCollection<E> - Указан в:
-
retainAllв интерфейсеSet<E> - Переопределяет:
-
retainAllв классеAbstractCollection<E> - Параметры:
-
c— коллекция, содержащая элементы, которые следует оставить в этом множестве - Возвращает:
-
true, если это множество изменилось в результате вызова - Исключения:
-
ClassCastException— если класс элемента этого множества несовместим с указанной коллекцией (необязательное ограничение) -
NullPointerException— если это множество содержит элемент null, а указанная коллекция не допускает элементы null (необязательное ограничение), или если указанная коллекция равна null - См. также:
iterator
public Iterator<E> iterator()
Возвращаемый итератор предоставляет снимок состояния множества на момент создания итератора. При обходе итератора синхронизация не требуется. Итератор НЕ поддерживает метод remove.
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, если указанный объект равен этому множеству - См. также:
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)
IterableIterable, пока не будут обработаны все элементы или пока действие не выбросит исключение. Если порядок итерации определен, действия выполняются в этом порядке. Исключения, выбрасываемые действием, передаются вызывающему коду. Поведение этого метода не определено, если действие выполняет побочные эффекты, изменяющие исходный набор элементов, за исключением случаев, когда переопределяющий класс определил политику конкурентного изменения.
- Указан в:
-
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, 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.