代码之家  ›  专栏  ›  技术社区  ›  Ahmed Bilal

Java CopyOnWriteArrayList添加元素(如果不存在)

  •  1
  • Ahmed Bilal  · 技术社区  · 1 年前

    我有一个CopyOnWriteArrayList,因为我的代码应该是线程安全的。 列表friuts=新的CopyOnWriteArrayList<>();

    我不想在列表中有重复的friuts,我不能使用Set,因为我也想有插入顺序。我写了这段代码

    public boolean add(String friut) {
        synchronized (friuts) {
            if (friuts.contains(friut)) {
                return false;
            }
            friuts.add(friut);
        }
        return true;
    }
    

    据我所知,CopyOnWriteArrayList已经并发了。因此,在同步块中添加CopyOnWriteArrayList.add对我来说似乎不是一个好主意。还有其他更好的解决方案吗?

    1 回复  |  直到 1 年前
        1
  •  1
  •   shmosel    1 年前

    使用 addIfAbsent() 方法:

    CopyOnWriteArrayList<String> fruits = new CopyOnWriteArrayList<>();
    
    public boolean add(String fruit) {
        fruits.addIfAbsent(fruit);
    }