gpt4 book ai didi

java - ArrayList 随机更新

转载 作者:太空宇宙 更新时间:2023-11-04 07:47:00 24 4
gpt4 key购买 nike

我有这个简单的程序来计算给定集合的所有子集。

我相信该算法是正确的。但部分而言:

while (included.size()>0){
ArrayList<Integer> temp =included.remove(0);
temp.add(first_element);
output.add(temp);
}

语句temp.add(first_element)不必要地更新not_included。请帮我理解为什么。

public class Recursion {

public static ArrayList<ArrayList<Integer>> getSubsets (ArrayList<Integer> input_set){
ArrayList<ArrayList<Integer>> output=new ArrayList<ArrayList<Integer>>();

if (input_set.isEmpty()){
ArrayList<Integer> this_subset=new ArrayList<Integer>();
output.add(this_subset);
}
else if (input_set.size()==1){
ArrayList<Integer> empty_subset=new ArrayList<Integer>();
output.add(input_set);
output.add(empty_subset);
}
else{
int first_element=input_set.remove(0);
ArrayList<ArrayList<Integer>> included = getSubsets(input_set);
ArrayList<ArrayList<Integer>> not_included = getSubsets(input_set);

while (included.size()>0){
ArrayList<Integer> temp =included.remove(0);
temp.add(first_element);
output.add(temp);
}
while (not_included.size()>0){
output.add(not_included.remove(0));
}
}
return output;
}


public static void main(String[] args) {
ArrayList<Integer> test= new ArrayList<Integer> ();
test.add(2);
test.add(1);
System.out.print(getSubsets(test));
}
}

最佳答案

尝试

ArrayList<ArrayList<Integer>> not_included = getSubsets(input_set.clone());

这可能仍然不起作用,因为数组列表的通用类型也是数组列表。搜索“深度复制”即可找到 100% 有效的解决方案。

getSubSet 仅返回指向同一列表的指针,因为参数相同,这就是included 和 not_included 是相同列表的原因。

关于java - ArrayList 随机更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15148071/

24 4 0