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)
返回一个包含此集合中所有元素的数组;
返回的数组的运行时类型是指定数组的运行时类型。
|
hashCodetoStringclone, finalize, getClass, notify, notifyAll, wait, wait, waitparallelStream, streampublic 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在这个集合中的元素
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.