java多線程之CopyOnWriteArraySet源碼解析

前言

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、總結

  1. CopyOnWriteArraySet是通過CopyOnWriteArrayList實現的,所有方法都是基於CopyOnWriteArrayList的API。
  2. CopyOnWriteArraySet和HashSet都繼承AbstractSet。
  3. HashSet通過內部封裝的HashMap的key來存儲。
  4. CopyOnWriteArraySet通過內部封裝的CopyOnWriteArrayList對象的API來實現。

結束語

下一篇將分析CurrentHashMap,如果本篇文章對你有所幫助,請隨手點擊一個贊,謝謝大家!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章