前言
CopyOnWriteArraySet可以理解为一个线程安全的HashSet,它的内部操作是由CopyOnWriteArrayList实现的,对CopyOnWriteArrayList不太熟悉的可以看看博主这篇文章:java多线程之CopyOnWriteArrayList源码解析
1、结构图
2、构造器
public class CopyOnWriteArraySet<E> extends AbstractSet<E>
implements java.io.Serializable {
private static final long serialVersionUID = 5457747651344034263L;
//内部维护了一个CopyOnWriteArrayList集合
private final CopyOnWriteArrayList<E> al;
//默认构造器,新建了一个CopyOnWriteArrayList集合对象
public CopyOnWriteArraySet() {
al = new CopyOnWriteArrayList<E>();
}
//将传入的集合,构造为一个CopyOnWriteArrayList集合对象
public CopyOnWriteArraySet(Collection<? extends E> c) {
if (c.getClass() == CopyOnWriteArraySet.class) {
@SuppressWarnings("unchecked") CopyOnWriteArraySet<E> cc =
(CopyOnWriteArraySet<E>)c;
al = new CopyOnWriteArrayList<E>(cc.al);
}
else {
al = new CopyOnWriteArrayList<E>();
al.addAllAbsent(c);
}
}
}
CopyOnWriteArraySet的构造器是构造一个内部的CopyOnWriteArrayList对象,然后所有的方法都是通过CopyOnWriteArrayList的方法完成的,这里不再重复赘述。
3、总结
- CopyOnWriteArraySet是通过CopyOnWriteArrayList实现的,所有方法都是基于CopyOnWriteArrayList的API。
- CopyOnWriteArraySet和HashSet都继承AbstractSet。
- HashSet通过内部封装的HashMap的key来存储。
- CopyOnWriteArraySet通过内部封装的CopyOnWriteArrayList对象的API来实现。
结束语
如果你觉得本篇文章对你有帮助的话,请帮忙点个赞,再加一个关注。