分享
三行代码  ›  专栏  ›  技术社区  ›  Dinero

修改ArrayList的ArrayList时出现并发修改异常 - Concurrent Modification Exception When Modifying ArrayList of ArrayList

  •  0
  • Dinero  · 技术社区  · 1 周前

    问题

    编写一个接受唯一整数数组并返回其powerset的函数。集x的幂集p(x)是x的所有子集的集。例如,[1,2]的幂集是[],[1],[2],[1,2]]。请注意,动力集中的组不需要按任何特定顺序排列。

    我的方法

    我的方法非常简单,我将从名为master的arraylist的arraylist开始。我将创建一个空列表并将其添加到主控形状。然后我将遍历每个数字,对于每个数字,我将创建一个新列表,就像主控中的所有列表一样,但将新的数字追加到主控中。因此,如果主列表中有一个空列表,并且我的num是1,那么我将向主列表添加[1]。当我2岁的时候,我会把[2]和[1,2]添加到主列表中。

    我的密码

    public static void main(String args[]) {
    
        ArrayList<Integer>  inputList = new ArrayList<>();
        inputList.add(1);
        inputList.add(2);
        inputList.add(3);
    
        System.out.println(powerset(inputList).size());
    
    }
    
    public static ArrayList<ArrayList<Integer>> powerset(ArrayList<Integer> array) {
    
        ArrayList<ArrayList<Integer>> master = new ArrayList<ArrayList<Integer>>();
        ArrayList<Integer> emptyList = new ArrayList<>();
        master.add(emptyList);
    
        for(Integer num: array){
            for(ArrayList<Integer> list: master){
                ArrayList<Integer> toAppendList = list;
                toAppendList.add(num);
                master.add(toAppendList);
            }
        }
        return master;
    }
    

    问题

    不知为什么我一直

    线程“main”java.util.ConcurrentModificationException中的异常

    我不确定这是如何并发修改的,以及如何删除它。

    1 回复  |  直到 1 周前
        1
  •  1
  •   Stefan Gilca    1 周前

    您试图同时迭代和修改列表,这是不允许的。算法也不正确。您可以在这里查看更好的实现 Obtaining a powerset of a set in Java :)