为什么我需要做list.add(new ArrayList<>(temp));将列表添加到2D列表时?

时间:2016-12-31 03:39:37

标签: java

我正在研究排列问题,我有以下代码:

public List<List<Integer>> permute(int[] nums) {
    List<List<Integer>> list = new ArrayList<>();
    helper(list,new ArrayList<Integer>(), nums);
    return list;
}

private void helper(List<List<Integer>> list, List<Integer> temp, int[] num) {
    if (temp.size() == num.length) {
        list.add(new ArrayList<>(temp));
    }
    else {
        for (int i = 0; i < num.length; i++) {
            if (temp.contains(num[i])) continue;
            temp.add(num[i]);
            helper(list, temp, num);
            temp.remove(temp.size() - 1);
        }
    }
}

我不明白为什么我需要写:

list.add(new ArrayList<>(temp));

而不是:

list.add(temp);

1 个答案:

答案 0 :(得分:3)

new ArrayList<>(temp)创建一个新的ArrayList,其元素与temp相同。这意味着如果helper的调用者做了类似的事情:

ArrayList<Integer> temp = new ArrayList<>();
// populate temp here
object.helper(list, temp, someIntArray);
temp.clear()

helper存储的列表不受clear的影响。