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类中可用的重要方法的列表。

序号
方法与说明
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