浅谈CopyOnWriteArraySet

CopyOnWriteArraySet结构图
CopyOnWriteArraySet.png
CopyOnWriteArraySet主要方法
  • public boolean add(E e);
  • public boolean remove(Object o);
CopyOnWriteArraySet解读主要方法

来看一下public boolean add(E e)源码

 public boolean add(E e) {
        //这个al就是CopyOnWriteArrayList也就是说CopyOnWriteArraySet内部是用CopyOnWriteArrayList来实现的
        return al.addIfAbsent(e);
    }
//这段代码也很好理解就是首先检查原来的数组里面有没有要添加的元素,如果有的话就不要再添加了,如果没有的话,创建一个新的数组,复制之前数组元素并且添加新的元素
public boolean addIfAbsent(E e) {
        final ReentrantLock lock = this.lock;
        lock.lock();
        try {
            // Copy while checking if already present.
            // This wins in the most common case where it is not present
            Object[] elements = getArray();
            int len = elements.length;
            Object[] newElements = new Object[len + 1];
            for (int i = 0; i < len; ++i) {
                if (eq(e, elements[i]))
                    return false; // exit, throwing away copy
                else
                    newElements[i] = elements[i];
            }
            newElements[len] = e;
            setArray(newElements);
            return true;
        } finally {
            lock.unlock();
        }
    }

来看一下 public boolean remove(Object o)源码

  public boolean remove(Object o){
        return al.remove(o);
    }
//调用CopyOnWriteArrayList的删除
CopyOnWriteArraySet遍历介绍

常用的遍历方式:

       //one  foreach  遍历
        for (Object o : list) {
            System.out.println(o);
        }
        //two 迭代器的遍历
        Iterator iterator = list.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
CopyOnWriteArraySet其他特性介绍
  • 首先,说明一下CopyOnWriteArraySet的数据结构是什么?其实它的结构严格意义来说是一个集合,它的底层实现是利用数组,它的上层实现是CopyOnWriteArrayList。
  • 其次,CopyOnWriteArraySet是一个集合,所以它是不可以放置重复的元素的,它的取重逻辑是在add中体现的。
  • 最后,CopyOnWriteArraySet是利用CopyOnWriteArrayList来实现的,因为CopyOnWriteArrayList是线程安全的,所以CopyOnWriteArraySet操作也是线程安全的。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 5,390评论 0 3
  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 9,712评论 0 16
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,408评论 19 139
  • (阿渣系列第1首) 阿渣再一次闯祸 被混蛋老爸又一顿暴揍 他偷两千块钱,离家出走 在网吧里,不分昼夜厮杀 网络世界...
    文学山主编山下阅读 3,345评论 0 0
  • 一个人的日子真的难熬,时间一天一天的在敲打你的骄傲,渐渐的我们便厌倦了被寂寞追着跑 我一个朋友最近几天经常对我感慨...
    路漫漫ll阅读 3,480评论 0 0