Skip to content

CopyOnWriteArraySet:读多写少场景的 Set

CopyOnWriteArraySet 是什么

CopyOnWriteArraySet 底层就是 CopyOnWriteArrayList,只是不允许重复:

java
public class CopyOnWriteArraySet<E> extends AbstractSet<E> {
    private final CopyOnWriteArrayList<E> al = new CopyOnWriteArrayList<>();

    public boolean add(E e) { return al.addIfAbsent(e); }
}

所以 CopyOnWriteArraySet = CopyOnWriteArrayList + 去重。


vs HashSet

特性HashSetCopyOnWriteArraySet
线程安全
读性能极快(无锁)
写性能快(O(1))慢(全量复制)
迭代安全Fail-FastFail-Safe

典型应用场景

读多写少的配置集合

java
CopyOnWriteArraySet<String> features = new CopyOnWriteArraySet<>();
features.add("featureA");
features.add("featureB");

// 高频读取
public boolean isEnabled(String feature) {
    return features.contains(feature);
}

总结

要点说明
底层实现CopyOnWriteArrayList
适用场景读多写少、需要 Set
局限性不适合写多场景

一句话:CopyOnWriteArraySet = CopyOnWriteArrayList + 去重。


相关链接

基于 VitePress 构建