我正在尝试保存排列列表,以供以后在程序中使用。但是,当我尝试将置换结果附加到full_list时,原始列表一遍又一遍地保存到列表中。但是从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);
}
}
}
System.out.println(arr);
的结果[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 2, 1]
[3, 1, 2]
主要方法中打印full_list的结果:
[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]
该如何解决,以便将打印结果保存在完整列表中?
答案 0 :(得分:2)
您正在更改添加到arr
的{{1}}的值。为防止这种情况,您应该将full_list
的新克隆添加到arr
:
full_list
答案 1 :(得分:0)
只需执行:val columns: Array[String] = df1.columns
val reorderedColumnNames: Array[String] = df2.columns //or do the reordering you want
val result: DataFrame = dataFrame.select(reorderedColumnNames.head, reorderedColumnNames.tail: _*)
代码中的错误是您每次都添加相同的full_list.add(new ArrayList<Integer>(arr));
,但是必须创建它的副本。这段代码正在创建副本ArrayList