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
| 特性 | HashSet | CopyOnWriteArraySet |
|---|---|---|
| 线程安全 | ❌ | ✅ |
| 读性能 | 快 | 极快(无锁) |
| 写性能 | 快(O(1)) | 慢(全量复制) |
| 迭代安全 | Fail-Fast | Fail-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 + 去重。
