当前位置: 首页 > 编程笔记 >

Java中的CopyOnWriteArraySet类

宋嘉懿
2023-03-14
本文向大家介绍Java中的CopyOnWriteArraySet类,包括了Java中的CopyOnWriteArraySet类的使用技巧和注意事项,需要的朋友参考一下

类声明

public class CopyOnWriteArraySet<E>
   extends AbstractSet<E>
implements Serializable

CopyOnWriteArraySet类在内部对其所有操作都使用CopyOnWriteArrayList,因此具有CopyOnWriteArrayList的基本属性。

    list-paddingleft-2">
  • 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
 类似资料:
  • 主要内容:1 CopyOnWriteArraySet的概述,2 CopyOnWriteArraySet的源码,2.1 基本结构,2.2 API方法介绍了JDK1.8的CopyOnWriteArraySet的特性和源码实现! 1 CopyOnWriteArraySet的概述 public class CopyOnWriteArraySet< E > extends AbstractSet< E > implements Serializable 前面的文章讲了CopyOnWriteArrayLis

  • 主要内容:文章目录,1.CopyOnWriteArrayList,2.CopyOnWriteArraySetCopyOnWrite的意思是,简单的说就是在对容器操作时,不是直接进行操作,而是先将容器复制一份,对新的容器操作后,再用新的容器覆盖原来的容器。 CopyOnWrite可以实现并发读操作,因为容器的写操作不会读当前容器造成影响。 CopyOnWrite的,不然n个写操作就会有n个容器副本,并且这n个副本会进行覆盖,最终只有1个副本的操作生效。 CopyOnWrite可以保证数据的,但是无

  • 问题内容: 在,没有线程安全版本的HashMap命名的ConcurrentHashMap和线程安全版本TreeMap的命名ConcurrentSkipListMap,但没有对HashSet的。 相反,通常有4种使用线程安全的方法: 1所使用的同时实现和线程安全的。 2使用方式,似乎不推荐这种方式。 3是基于并被广泛使用的。 4是基于CopyOnWriteArrayList的,因此它具有的相同基本属

  • 在这个bug报告中,Doug Lea写道(指的是JDK 5.0的预发布版本): 附言。我知道不推荐使用,并且内部基于。

  • 问题内容: 我想通过Java中的类实现FIFO。 这样的类已经存在了吗?如果没有,我该如何实施自己的? 注意 我在这里http://www.dcache.org/manuals/cells/docs/api/dmg/util/Fifo.html找到了一个类,但其中没有dmg.util。*。我不知道这样的包是否存在。 问题答案: 您正在寻找实现Queue接口的任何类,排除和不使用FIFO算法。 可能

  • 本文向大家介绍Java中的CopyOnWriteArrayList类,包括了Java中的CopyOnWriteArrayList类的使用技巧和注意事项,需要的朋友参考一下 类声明 CopyOnWriteArrayList是ArrayList的线程安全变体,其中可以更改ArrayList的操作(添加,更新,设置方法)创建基础数组的克隆。 CopyOnWriteArrayList将在基于线程的环境中使