public class CopyOnWriteArraySet<E> extends AbstractSet<E> implements Serializable
CopyOnWriteArraySet类在内部对其所有操作都使用CopyOnWriteArrayList,因此具有CopyOnWriteArrayList的基本属性。
CopyOnWriteArraySet是线程安全的。
CopyOnWriteArraySet用于基于线程的环境,在该环境中读取操作非常频繁,而更新操作很少。
CopyOnWriteArraySet的迭代器永远不会抛出ConcurrentModificationException。
自创建迭代器以来,对CopyOnWriteArraySet的任何类型的修改都不会在迭代过程中反映出来。
迭代中不支持诸如remove,set和add之类的集合修改方法。此方法将引发UnsupportedOperationException。
以下是CopyOnWriteArraySet类中可用的重要方法的列表。
| 序号 | 方法与说明 |
|---|---|
| 1 | add() 将一个对象添加到集合中。 |
| 2 | clear() 从集合中删除所有对象。 |
| 3 | contains() 如果指定对象是集合中的元素,则返回true。 |
| 4 | isEmpty() 如果集合没有元素,则返回true。 |
| 5 | iterator() 返回集合的Iterator对象,该对象可用于检索对象。 |
| 6 | remove() 从集合中删除指定的对象。 |
| 7 | size() 返回集合中元素的数量。 |
以下是解释CopyOnWriteArraySet功能的示例-
import java.util.Iterator;
import java.util.concurrent.CopyOnWriteArraySet;
public class Tester {
public static void main(String args[]) {
//创建一个数组列表
CopyOnWriteArraySet<Integer> set = new CopyOnWriteArraySet();
System.out.println("Initial size of set: " + set.size());
int count[] = {34, 22,10,60,30,22};
//将元素添加到数组列表
for(int i = 0; i < 5; i++) {
set.add(count[i]);
}
System.out.println("Size of set after additions: " + set.size());
//显示设置
System.out.println("Contents of set: " + set);
//从数组列表中删除元素
set.remove(10);
System.out.println("Size of set after deletion: " + set.size());
System.out.println("Contents of set: " + set);
try {
Iterator<Integer> iterator = set.iterator();
while(iterator.hasNext()) {
iterator.remove();
}
}catch(UnsupportedOperationException e) {
System.out.println("不支持的方法:");
}
System.out.println("Size of set: " + set.size());
}
}这将产生以下结果-
输出结果
Initial size of set: 0 Size of set after additions: 5 Contents of set: [34, 22, 10, 60, 30] Size of set after deletion: 4 Contents of set: [34, 22, 60, 30] 不支持的方法: Size of set: 4