Java中的CopyOnWriteArraySet类
类声明
public class CopyOnWriteArraySet<E> extends AbstractSet<E> implements Serializable
CopyOnWriteArraySet类在内部对其所有操作都使用CopyOnWriteArrayList,因此具有CopyOnWriteArrayList的基本属性。
CopyOnWriteArraySet是线程安全的。
CopyOnWriteArraySet用于基于线程的环境,在该环境中读取操作非常频繁,而更新操作很少。
CopyOnWriteArraySet的迭代器永远不会抛出ConcurrentModificationException。
自创建迭代器以来,对CopyOnWriteArraySet的任何类型的修改都不会在迭代过程中反映出来。
迭代中不支持诸如remove,set和add之类的集合修改方法。此方法将引发UnsupportedOperationException。
CopyOnWriteArraySet方法
以下是CopyOnWriteArraySet类中可用的重要方法的列表。
将一个对象添加到集合中。
从集合中删除所有对象。
如果指定对象是集合中的元素,则返回true。
如果集合没有元素,则返回true。
返回集合的Iterator对象,该对象可用于检索对象。
从集合中删除指定的对象。
返回集合中元素的数量。
示例
以下是解释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