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,如果本篇文章对你有所帮助,请随手点击一个赞,谢谢大家!

猜你喜欢

转载自blog.csdn.net/cool_summer_moon/article/details/106164424