保存到方法内的ArrayList中-意外结果

时间:2018-12-06 21:50:19

标签: java arraylist permutation

我正在尝试保存排列列表,以供以后在程序中使用。但是,当我尝试将置换结果附加到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]]

该如何解决,以便将打印结果保存在完整列表中?

2 个答案:

答案 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