java.lang.Object
java.util.AbstractCollection <E>
java.util.AbstractSet <E>
java.util.concurrent.CopyOnWriteArraySet<E>
- 类型参数:
E- 该集合中元素的类型
- 所有已实现的接口:
Serializable,Iterable<E>,Collection<E>,Set<E>
一个
Set 使用内部 CopyOnWriteArrayList 进行所有操作。因此,它具有相同的基本属性:
- 它最适合集合大小通常保持较小、只读操作远远多于可变操作的应用程序,并且您需要防止遍历期间线程之间的干扰。
- 它是线程安全的。
- 可变操作(
add、set、remove等)非常昂贵,因为它们通常需要复制整个底层数组。 - 迭代器不支持可变的
remove操作。 - 通过迭代器遍历速度很快,不会遇到其他线程的干扰。迭代器依赖于在构造迭代器时数组不变的快照。
示例用法。以下代码草图使用写时复制集来维护一组处理程序对象,这些对象在状态更新时执行某些操作。
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 集合框架 的成员。
- 自从:
- 1.5
- 参见:
-
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述boolean如果指定的元素不存在,则将其添加到此集合中。booleanaddAll(Collection<? extends E> c) 如果指定集合中的所有元素不存在,则将它们添加到此集合中。voidclear()从此集合中删除所有元素。boolean如果此集合包含指定元素,则返回true。booleancontainsAll(Collection<?> c) 如果此集合包含指定集合的所有元素,则返回true。boolean比较指定对象与此集合是否相等。void对Iterable的每个元素执行给定的操作,直到处理完所有元素或操作引发异常。booleanisEmpty()如果此集合不包含任何元素,则返回true。iterator()按照添加这些元素的顺序返回此集合中包含的元素的迭代器。boolean如果存在,则从此集合中移除指定元素。booleanremoveAll(Collection<?> c) 从此集合中移除指定集合中包含的所有元素。boolean移除此集合中满足给定谓词的所有元素。booleanretainAll(Collection<?> c) 仅保留此集合中包含在指定集合中的元素。intsize()返回此集合中的元素数。按照添加这些元素的顺序在此集合中的元素上返回Spliterator。Object[]toArray()返回包含此集合中所有元素的数组。<T> T[]toArray(T[] a) 返回包含此集合中所有元素的数组;返回数组的运行时类型是指定数组的类型。在类 java.util.AbstractSet 中声明的方法
hashCode在类 java.util.AbstractCollection 中声明的方法
toString在接口 java.util.Collection 中声明的方法
parallelStream, stream, toArray
-
构造方法详细信息
-
CopyOnWriteArraySet
public CopyOnWriteArraySet()创建一个空集。 -
CopyOnWriteArraySet
创建一个包含指定集合的所有元素的集合。- 参数:
c- 最初包含的元素集合- 抛出:
NullPointerException- 如果指定的集合为空
-
-
方法详情
-
size
public int size()返回此集合中的元素数。 -
isEmpty
public boolean isEmpty()如果此集合不包含任何元素,则返回true。- 指定者:
isEmpty在接口Collection<E>中- 指定者:
isEmpty在接口Set<E>中- 重写:
isEmpty在类AbstractCollection<E>中- 返回:
true如果这个集合不包含任何元素
-
contains
如果此集合包含指定元素,则返回true。更正式地说,返回true当且仅当此集合包含元素e使得Objects.equals(o, e)。- 指定者:
contains在接口Collection<E>中- 指定者:
contains在接口Set<E>中- 重写:
contains在类AbstractCollection<E>中- 参数:
o- 要测试其在该集合中是否存在的元素- 返回:
true如果此集合包含指定元素
-
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- 如果指定数组为空
-
clear
public void clear()从此集合中删除所有元素。此调用返回后该集合将为空。- 指定者:
clear在接口Collection<E>中- 指定者:
clear在接口Set<E>中- 重写:
clear在类AbstractCollection<E>中
-
remove
如果存在,则从此集合中移除指定元素。更正式地说,删除元素e这样Objects.equals(o, e)如果此集合包含这样的元素。如果此集合包含该元素,则返回true(或者等效地,如果此集合因调用而更改)。 (一旦调用返回,此集合将不包含该元素。)- 指定者:
remove在接口Collection<E>中- 指定者:
remove在接口Set<E>中- 重写:
remove在类AbstractCollection<E>中- 参数:
o- 要从此集合中删除的对象(如果存在)- 返回:
true如果这个集合包含指定的元素
-
add
如果指定的元素不存在,则将其添加到此集合中。更正式地说,如果集合不包含满足Objects.equals(e, e2)的元素e2,则将指定元素e添加到该集合。如果此集合已包含该元素,则调用保持集合不变并返回false。- 指定者:
add在接口Collection<E>中- 指定者:
add在接口Set<E>中- 重写:
add在类AbstractCollection<E>中- 参数:
e- 要添加到此集合的元素- 返回:
true如果此集合尚未包含指定元素
-
containsAll
如果此集合包含指定集合的所有元素,则返回true。如果指定的集合也是一个集合,如果是一个集合,则此方法返回true子集这套。- 指定者:
containsAll在接口Collection<E>中- 指定者:
containsAll在接口Set<E>中- 重写:
containsAll在类AbstractCollection<E>中- 参数:
c- 要检查此集合中是否包含的集合- 返回:
true如果此集合包含指定集合的所有元素- 抛出:
NullPointerException- 如果指定的集合为空- 参见:
-
addAll
如果指定集合中的所有元素不存在,则将它们添加到此集合中。如果指定的集合也是一个集合,则addAll操作有效地修改了这个集合,使其值为union两组中的。如果在操作进行时修改了指定的集合,则此操作的行为是未定义的。- 指定者:
addAll在接口Collection<E>中- 指定者:
addAll在接口Set<E>中- 重写:
addAll在类AbstractCollection<E>中- 参数:
c- 包含要添加到此集合的元素的集合- 返回:
true如果此集合因调用而更改- 抛出:
NullPointerException- 如果指定的集合为空- 参见:
-
removeAll
从此集合中移除指定集合中包含的所有元素。如果指定的集合也是一个集合,则此操作有效地修改了这个集合,使其值为不对称集差两组中的。- 指定者:
removeAll在接口Collection<E>中- 指定者:
removeAll在接口Set<E>中- 重写:
removeAll在类AbstractSet<E>中- 参数:
c- 包含要从此集合中删除的元素的集合- 返回:
true如果此集合因调用而更改- 抛出:
ClassCastException- 如果此集合的元素类与指定集合不兼容 (optional)NullPointerException- 如果此集合包含空元素并且指定的集合不允许空元素 (optional),或者如果指定的集合为空- 参见:
-
retainAll
仅保留此集合中包含在指定集合中的元素。换句话说,从该集合中移除所有未包含在指定集合中的元素。如果指定的集合也是一个集合,则此操作有效地修改了这个集合,使其值为intersection两组中的。- 指定者:
retainAll在接口Collection<E>中- 指定者:
retainAll在接口Set<E>中- 重写:
retainAll在类AbstractCollection<E>中- 参数:
c- 包含要保留在此集合中的元素的集合- 返回:
true如果此集合因调用而更改- 抛出:
ClassCastException- 如果此集合的元素类与指定集合不兼容 (optional)NullPointerException- 如果此集合包含空元素并且指定的集合不允许空元素 (optional),或者如果指定的集合为空- 参见:
-
iterator
按照添加这些元素的顺序返回此集合中包含的元素的迭代器。返回的迭代器提供了构造迭代器时集合状态的快照。遍历迭代器时不需要同步。迭代器确实 NOT 支持
remove方法。 -
equals
比较指定对象与此集合是否相等。如果指定对象与此对象是同一对象,或者如果它也是一个Set并且 iterator 在指定集合上返回的元素与迭代器在该集合上返回的元素相同,则返回true。更正式地说,如果两个迭代器返回相同数量的元素,则认为这两个迭代器返回相同的元素,并且对于迭代器在指定集合上返回的每个元素e1,迭代器在该集合上返回一个元素e2使得Objects.equals(e1, e2).- 指定者:
equals在接口Collection<E>中- 指定者:
equals在接口Set<E>中- 重写:
equals在类AbstractSet<E>中- 参数:
o- 要与此集合进行相等比较的对象- 返回:
true如果指定的对象等于这个集合- 参见:
-
removeIf
从接口Collection复制的描述移除此集合中满足给定谓词的所有元素。迭代期间或由谓词抛出的错误或运行时异常将传递给调用者。- 指定者:
removeIf在接口Collection<E>中- 参数:
filter- 为要删除的元素返回true的谓词- 返回:
true如果删除了任何元素- 抛出:
NullPointerException- 如果指定的过滤器为空
-
forEach
从接口Iterable复制的描述对Iterable的每个元素执行给定的操作,直到处理完所有元素或操作引发异常。如果指定了迭代顺序,则将按迭代顺序执行操作。操作抛出的异常被转发给调用者。如果操作执行修改元素的底层源的副作用,则此方法的行为是未指定的,除非重写类已指定并发修改策略。
- 指定者:
forEach在接口Iterable<E>中- 参数:
action- 对每个元素执行的操作- 抛出:
NullPointerException- 如果指定的操作为空
-
spliterator
按照添加这些元素的顺序在此集合中的元素上返回Spliterator。Spliterator报告Spliterator.IMMUTABLE、Spliterator.DISTINCT、Spliterator.SIZED和Spliterator.SUBSIZED。拆分器在构建拆分器时提供集合状态的快照。在分离器上运行时不需要同步。
- 指定者:
spliterator在接口Collection<E>中- 指定者:
spliterator在接口Iterable<E>中- 指定者:
spliterator在接口Set<E>中- 返回:
-
a
Spliterator覆盖此集合中的元素 - 自从:
- 1.8
-