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<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的成员。
CopyOnWriteArrayList
, Serialized Form
Constructor and Description |
---|
CopyOnWriteArraySet()
创建一个空集。
|
CopyOnWriteArraySet(Collection<? extends E> c)
创建一个包含指定集合的所有元素的集合。
|
Modifier and Type | Method and Description |
---|---|
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)
返回一个包含此集合中所有元素的数组;
返回的数组的运行时类型是指定数组的运行时类型。
|
hashCode
toString
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
parallelStream, stream
public CopyOnWriteArraySet()
public CopyOnWriteArraySet(Collection<? extends E> c)
c
- 最初包含的元素的集合
NullPointerException
- 如果指定的集合为空
public int size()
size
在界面
Collection<E>
size
在接口
Set<E>
size
在类别
AbstractCollection<E>
public boolean isEmpty()
true
。
isEmpty
在接口
Collection<E>
isEmpty
在界面
Set<E>
isEmpty
在类别
AbstractCollection<E>
true
如果此集合不包含元素
public boolean contains(Object o)
true
。
更正式地,返回true
当且仅当这个集合包含一个元素e
这样(o==null ? e==null : o.equals(e)) 。
contains
在界面
Collection<E>
contains
在界面
Set<E>
contains
在类别
AbstractCollection<E>
o
- 要在此集合中存在的元素将被测试
true
如果此集合包含指定的元素
public Object[] toArray()
返回的数组将是“安全的”,因为该集合不保留对它的引用。 (换句话说,这个方法必须分配一个新的数组,即使这个数组是由数组支持的)。 因此,调用者可以自由地修改返回的数组。
此方法充当基于阵列和基于集合的API之间的桥梁。
toArray
在界面
Collection<E>
toArray
在界面
Set<E>
toArray
在类别
AbstractCollection<E>
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
- 如果指定的数组为空
public void clear()
clear
在接口
Collection<E>
clear
在界面
Set<E>
clear
在类别
AbstractCollection<E>
public boolean remove(Object o)
e
,使(o==null ? e==null : o.equals(e)) ,如果这个集合包含这样一个元素。
如果此集合包含元素(或等效地,如果该集合由于调用而更改),则返回true
。
(一旦调用返回,此集合将不包含该元素。)
remove
在界面
Collection<E>
remove
在界面
Set<E>
remove
在类别
AbstractCollection<E>
o
- 要从此集合中删除的对象(如果存在)
true
如果这个集合包含指定的元素
public boolean add(E e)
e
这一套如果集合不包含元素e2
这样(e==null ? e2==null : e.equals(e2))。
如果该集合已经包含该元素,则该呼叫将保持不变,并返回false
。
add
在界面
Collection<E>
add
在界面
Set<E>
add
在类别
AbstractCollection<E>
e
- 要添加到此集合的元素
true
如果此集合尚未包含指定的元素
public boolean containsAll(Collection<?> c)
true
如果此集合包含所有指定集合的元素。
如果指定的集合也是一个集合,如果它是该集合的子集 ,则此方法返回true
。
containsAll
在界面
Collection<E>
containsAll
在界面
Set<E>
containsAll
在
AbstractCollection<E>
c
- 要在此集合中检查收集的集合
true
如果此集合包含指定集合的所有元素
NullPointerException
- 如果指定的集合为空
contains(Object)
public boolean addAll(Collection<? extends E> c)
addAll
,这样它的值是两组的联合操作实际修改此设置。
如果在操作进行中修改了指定的集合,则此操作的行为是未定义的。
addAll
在接口
Collection<E>
addAll
在界面
Set<E>
addAll
中的
AbstractCollection<E>
c
- 包含要添加到此集合的元素的集合
true
如果此设置由于呼叫而更改
NullPointerException
- 如果指定的集合为空
add(Object)
public boolean removeAll(Collection<?> c)
removeAll
在界面
Collection<E>
removeAll
在界面
Set<E>
removeAll
在类别
AbstractSet<E>
c
- 包含要从此集合中删除的元素的集合
true
如果此设置由于呼叫而更改
ClassCastException
- 如果此集合的元素的类与指定的集合不兼容(可选)
NullPointerException
- 如果此集合包含空元素,并且指定的集合不允许空元素(可选),或者如果指定的集合为空
remove(Object)
public boolean retainAll(Collection<?> c)
retainAll
在接口
Collection<E>
retainAll
在界面
Set<E>
retainAll
在类别
AbstractCollection<E>
c
- 包含要保留在此集合中的元素的集合
true
如果此设置由于呼叫而更改
ClassCastException
- 如果此集合的元素的类与指定的集合不兼容(可选)
NullPointerException
- 如果此集合包含空元素,并且指定的集合不允许空元素(可选),或者如果指定的集合为空
remove(Object)
public Iterator<E> iterator()
返回的迭代器在构建迭代器时提供集合的状态的快照。 遍历迭代器时不需要同步。 该迭代器不支持remove
方法。
public boolean equals(Object o)
true
,或者如果它也是Set
,并且iterator在指定集上返回的元素与迭代器在该集合上返回的元素相同。
更正式地,如果两个迭代器返回相同数量的元素,并且对于迭代器在指定集合上返回的每个元素e1
,那么这两个迭代器被认为返回相同的元素,迭代器在该集合上返回的元素e2
使得(e1==null ? e2==null : e1.equals(e2))
。
equals
在接口
Collection<E>
equals
在界面
Set<E>
equals
在
AbstractSet<E>
o
- 要与该集合相等的对象
true
如果指定的对象等于此集合
Object.hashCode()
, HashMap
public boolean removeIf(Predicate<? super E> filter)
Collection
复制
removeIf
在界面
Collection<E>
filter
- 一个谓词,为要删除的元素返回
true
true
如果有任何元素被删除
public void forEach(Consumer<? super E> action)
Iterable
复制
Iterable
的每个元素执行给定的操作,直到所有元素都被处理或动作引发异常。
除非实现类另有规定,否则按照迭代的顺序执行操作(如果指定了迭代顺序)。
动作抛出的异常被转发给呼叫者。
public Spliterator<E> spliterator()
Spliterator
。
该Spliterator
报告Spliterator.IMMUTABLE
, Spliterator.DISTINCT
, Spliterator.SIZED
和Spliterator.SUBSIZED
。
拼接器在构建拼接器时提供该集合的状态的快照。 在拼接器上操作时不需要同步。
spliterator
在界面
Iterable<E>
spliterator
在界面
Collection<E>
spliterator
在接口
Set<E>
Spliterator
在这个集合中的元素