修改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 :)
问题
编写一个函数,接收唯一整数数组和 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 :)