上篇文章介绍了CopyOnWriteArrayList的基本源码,本文介绍CopyOnWriteArraySet,这是基于上面的CopyOnWriteArrayList实现的。首先来看看类图,如下:

从类图来看,这个CopyOnWriteArraySet很简单,它继承了AbstractSet,实现了Serializable接口。在CopyOnWriteArraySet里面,使用了CopyOnWriteArrayList作为变量,也就是操作
CopyOnWriteArraySet其实是委托给里面的CopyOnWriteArrayList完成的。
1、构造函数
CopyOnWriteArraySet有两个构造函数,分别如下所示:

其中空参数的构造函数默认创建一个CopyOnWriteArrayList,还有一个构造函数是在构造的时候可以传入一个Collection。这个类似集合框架中的源码。
2、add操作
add操作是向Set中添加元素,从源码可以看出,还是委托给内部的al来添加元素的。

3、contains操作
contains操作是判断该set中是否含有某一元素。其底层还是委托给al来实现的。

4、remove操作
remove操作是从set中删除某一元素,其源码中还是委托给al去处理的。

此外,还有removeAll操作,其原理类似。
5、size操作
size操作是返回set中元素个数,其源码如下。从源码可以看出,size操作还是委托给类中的成员al去处理的。

6、总结
CopyOnWriteArraySet其实就是对CopyOnWriteArrayList的一次封装,其操作都是委托给CopyOnWriteArrayList变量去处理的,因此掌握CopyOnWriteArrayList,就了解CopyOnWriteArraySet了。




