zoukankan      html  css  js  c++  java
  • 浅谈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操作也是线程安全的。
  • 相关阅读:
    Android开发 设置控件边角半圆
    Android开发 使用XML文件设置背景变化
    Android开发 ImageButton加载drawable文件问题
    Android开发 网络检测(使用广播监听)
    android studio无法在可视化页面预览布局文件
    jdbc连接oracle数据库
    「数学」- 暑假后文化课能力复健 20210906 ~ 20210912
    「数学」- 暑假后文化课能力复健 20210830 ~ 20210905
    「数学」高等代数学习笔记
    「数学」浅谈极值点偏移问题的处理技巧
  • 原文地址:https://www.cnblogs.com/exmyth/p/11588440.html
Copyright © 2011-2022 走看看