前言
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來實現。
結束語
下一篇將分析CurrentHashMap,如果本篇文章對你有所幫助,請隨手點擊一個贊,謝謝大家!