Java List <integer>的深层副本

时间:2018-03-24 03:01:09

标签: java list deep-copy

我在使用List<Integer> res = new ArrayList<>(list)时感到困惑,其中list是另一个List<Integer>类型变量。如下:

private void dfs(int[] nums, int startIndex, List<Integer> list, List<Integer> res) {
    if (list.size() > res.size()) {
        res = new ArrayList<>(list);
    }
    for (int i = startIndex; i < nums.length; i++) {
        if (list.size() == 0 || nums[i] % list.get(0) == 0) {
            list.add(0, nums[i]);
            dfs(nums, i + 1, list, res);
            list.remove(0);
        }
    }
}

我假设因为我使用了res = new ArrayList<>(list)初始值设定项而不是res = list,所以Java会对list变量进行深层复制,但我错了:当我修改res时,list变量仍会发生变化。但是,在大多数情况下,我编写以下代码:

private void dfs(int[] nums, int index, int target, List<List<Integer>> res, List<Integer> list) {
    if (target == 0) {
        res.add(new ArrayList<>(list));
        return;
    }
    ...
}

即使我稍后修改了List<Integer>变量,res中的list元素也不会改变。为什么会这样?

0 个答案:

没有答案