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

Java 修改ArrayList的ArrayList时并发修改异常,java,algorithm,exception,java.util.concurrent,Java,Algorithm,Exception,Java.util.concurrent,问题 编写一个接受唯一整数数组并返回其幂集的函数。集合X的幂集P(X)是X的所有子集的集合。例如,[1,2]的幂集是[[],[1],[2],[1,2]]。请注意,功率集中的组不需要按任何特定顺序排列 我的方法 我的方法很简单,我将从一个名为master的ArrayList的ArrayList开始。我将创建一个空列表并将其添加到主控列表中。然后,我将遍历每个数字,并为每个数字创建一个新列表,就像主列表中的所有列表一样,但将新的数字附加到它。因此,如果主列表中有一个空列表,并且我的num是1,那么我

问题

编写一个接受唯一整数数组并返回其幂集的函数。集合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;
}
publicstaticvoidmain(字符串参数[]){
ArrayList inputList=新的ArrayList();
输入列表。添加(1);
输入列表。添加(2);
输入列表。添加(3);
System.out.println(powerset(inputList.size());
}
公共静态ArrayList电源集(ArrayList阵列){
ArrayList master=新的ArrayList();
ArrayList emptyList=新建ArrayList();
master.add(清空列表);
for(整数编号:数组){
用于(阵列列表:主){
ArrayList toAppendList=列表;
toAppendList.add(num);
master.add(toAppendList);
}
}
返回主机;
}
问题

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中出现异常


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

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