这个问题在这里已经有答案了:
为什么我的arraylist包含添加到列表中的最后一项的n个副本(5个答案)
两年前关门了。
我正在试图保存一个排列列表,以便稍后在我的程序中使用。但是,当我尝试将排列结果附加到完整的\u列表时,原始列表会一次又一次地保存到列表中。但是从system.out.println(arr)打印的结果;正是我想要的。
import java.util.*;
public class mytest {
public static void main(String[] args){
ArrayList<Integer> inlist = new ArrayList<Integer>();
inlist.add(1);
inlist.add(2);
inlist.add(3);
permute(inlist, 0);
System.out.println(full_list);
}
public static HashSet<ArrayList<Integer>> full_list = new HashSet<ArrayList<Integer>>();
public static void permute(ArrayList<Integer> arr, int k){
for(int i = k; i < arr.size(); i++){
java.util.Collections.swap(arr, i, k);
permute(arr, k+1);
java.util.Collections.swap(arr, k, i);
}
if (k == arr.size() -1){
System.out.println(arr);
full_list.add(arr);
}
}
}
系统输出打印结果(arr);
[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 2, 1]
[3, 1, 2]
在主方法中打印完整\u列表的结果:
[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]
我能做些什么来解决这个问题,以便打印的结果保存在完整的\u列表中?
2条答案
按热度按时间jtjikinw1#
只要做:
full_list.add(new ArrayList<Integer>(arr));
代码中的错误是您正在添加相同的ArrayList
每次,但你必须创建一个副本。此代码正在创建副本new ArrayList<Integer>(arr)
rfbsl7qr2#
您正在更改的值
arr
正在增加full_list
. 要防止这种情况,您应该添加的新克隆arr
至full_list
: