修改ArrayList的ArrayList时并发修改异常

Concurrent Modification Exception When Modifying ArrayList of ArrayList

问题

编写一个函数,接收唯一整数数组和 returns 其幂集。集合 X 的幂集 P(X) 是 X 的所有子集的集合。例如 [1,2] 的幂集是 [[], [1], [2], [1,2]]。请注意,幂集中的集合不需要按任何特定顺序排列。

我的做法

我的方法很简单,我将从一个名为 master 的 ArrayList 的 ArrayList 开始。我将创建一个 emptyList 并将其添加到 master。然后我将遍历每个数字,并为每个数字创建一个新列表,就像 master 中的所有列表一样,但将新数字附加到它。所以如果我在 master 列表中有一个空列表并且我的 num 是 1 我会添加 [1] 到 master。然后当我在 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;
}

问题

出于某种原因,我不断收到

Exception in thread "main" java.util.ConcurrentModificationException

我不确定这是一个并发修改,我该如何删除它。

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