COW并发容器之CopyOnWriteArrayList源码学习

Copy On Write容器:写时复制容器(读写分离容器);

1 底层原理:

看完源码后,得出的底层原理如下:

  1. 对容器进行一个赋值操作;
  2. 老容器中的值全部拷贝到新容器当中;
  3. 新容器长度+1;
  4. add的新元素添加到新容器的最后一个位置;
  5. 将老容器的地址指向新的容器;
2 源码分析:
2.1 基本用法

image.png

2.2 构造函数

CopyOnWriteArrayList内部有一个Object[] array,空构造器就是给这个array赋值为一个长度为0的Object类型的数组;

image.png

image.png

image.png

image.png

2.3 add方法

add方法就是将要添加元素的数组拷贝一份出来,并且在原有长度的基础上+1后,创建一个新的数组,然后在新的数组最后位置上添加上要添加的元素,最后将新数组指向底层的array;

image.png

image.png

2.4 addIfAbsent(E e)方法

addIfAbsent方法,判断数组中有没有已经相同值的元素,如果有就会添加失败

image.png

2.5 indexOf()方法

indexOf(Object o, Object[] elements, int index, int fence)的作用就是,遍历整个数组,

当找到相同元素时,返回响应元素下标;

没找到时,返回-1;

image.png

2.6 addIfAbsent(E e, Object[] snapshot)方法

addIfAbsent的主要作用是判断要添加进去的元素,是不是已经存在了,如果存在则不添加了

image.png

2.7 eq(Object o1, Object o2)方法

image.png

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享