当前位置: 首页 > news >正文

CopyOnWriteArrayList源码阅读

1、构造方法

  • 无参构造函数

    //创建一个空数组,赋值给array引用
    public CopyOnWriteArrayList() {setArray(new Object[0]);
    }//仅通过getArray / setArray访问的数组。
    private transient volatile Object[] array;//设置数组
    final void setArray(Object[] a) {array = a;
    }
  • 有参构造函数

    //创建一个包含指定集合的元素的列表,其顺序由集合的*迭代器返回。
    public CopyOnWriteArrayList(Collection<? extends E> c) {//定义空数组Object[] elements;//如果集合元素是copyWriteArraList.class,则直接调用getArray()获取array属性赋值给元素数组if (c.getClass() == CopyOnWriteArrayList.class)elements = ((CopyOnWriteArrayList<?>)c).getArray();else {//如果不是,则转数组。elements = c.toArray();// c.toArray might (incorrectly) not return Object[] (see 6260652)//如果元素内对象不是Object[],拷贝成Object[]if (elements.getClass() != Object[].class)elements = Arrays.copyOf(elements, elements.length, Object[].class);}//array引用指向新数组setArray(elements);
    }//创建一个保存给定数组副本的列表。
    public CopyOnWriteArrayList(E[] toCopyIn) {//数组拷贝成Object[],并将array引用指向新数组setArray(Arrays.copyOf(toCopyIn, toCopyIn.length, Object[].class));
    }

2、插入方法

  • add(E e)

    //将指定的元素追加到此列表的末尾。
    public boolean add(E e) {//添加独占锁final ReentrantLock lock = this.lock;//加锁,每次只允许一个线程进入这个逻辑。lock.lock();try {//获取所有的元素Object[] elements = getArray();//获取元素长度int len = elements.length;//拷贝容量更大的数组,写时赋值Object[] newElements = Arrays.copyOf(elements, len + 1);//赋值newElements[len] = e;//设置新的引用setArray(newElements);return true;} finally {//解锁lock.unlock();}
    }
    
http://www.lryc.cn/news/267442.html

相关文章:

  • Windows操作系统:共享文件夹,防火墙的设置
  • STM32独立看门狗
  • 财务数据智能化:用AI工具高效制作财务分析PPT报告
  • vue3中使用three.js记录
  • MySQL——表的内外连接
  • 基于IPP-FFT的线性调频Z(Chirp-Z,CZT)的C++类库封装并导出为dll(固定接口支持更新)
  • 【C语言】指针
  • PostgreSql 索引使用技巧
  • 【华为数据之道学习笔记】6-7打造业务自助分析的关键能力
  • K8S从harbor中拉取镜像的规则imagePullPolicy
  • LeetCode刷题--- 优美的排列
  • 关于edge浏览器以及插件推荐【亲测好用】
  • 关于“Python”的核心知识点整理大全43
  • Android Framework一些问题思考
  • 2024年安全员-C证证考试题库及安全员-C证试题解析
  • 推广主要指标及定义
  • 【Proteus仿真】【Arduino单片机】水质监测报警系统设计
  • 随机问卷调查数据的处理(uniapp)
  • 开源分布式搜索引擎ElasticSearch结合内网穿透远程连接
  • Leetcode2928. 给小朋友们分糖果 I
  • go-zero开发入门之网关往rpc服务传递数据2
  • Cron介绍,以及常见的cron表达式
  • 智能优化算法应用:基于协作搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • 分布式训练通信NCCL之Ring-Allreduce详解
  • os_util 工具类和方法的实现
  • uview表单校验带星号
  • vue+element实现动态表格:根据后台返回的属性名和字段动态生成可变表格
  • 云渲染UE4像素流送搭建(winows、ubuntu单实例与多实例像素流送)
  • Unity VR Pico apk安装失败:INSTALL_FAILED_UPDATE_INCOMPATIBLE
  • Prompt 提示工程学习笔记