2016-11-30 159 views
-2

我很困惑的線res.add(new ArrayList<Integer>(temp));。你能告訴我爲什麼我錯用了res.add(temp)ArrayList初始化困惑

public void dfs(int[] nums, int index, List<List<Integer>> res, List<Integer> temp) { 
    res.add(new ArrayList<Integer>(temp)); 
    for(int i = index; i < nums.length; i++) { 
     temp.add(nums[i]); 
     dfs(nums, i + 1, res, temp); 
     temp.remove(temp.size() - 1); 
    } 
} 
+0

您正在初始化另一個列表的'ArrayList',本身沒有_wrong_。也許你打算使用'addAll()'。 –

+1

java沒有困惑..你只困惑 – sasikumar

+0

你能否也顯示這兩種方法的調用代碼?目前還不清楚你打算在調用方法後如何使用'res'。 –

回答

0

可變temp是一個對象引用在存儲器對象,在這種情況下Integers列表。通過調用temp上的remove方法,您實際上會更改對象,temp指向內存中。因此,在for循環之後,您可能會在嘗試使用temp時收到空列表。

使用new ArrayList<Integer>(temp)實際創建在原始temp參考有沒有關係新內存list of Integers對象,換句話說,它不引用新list of Integer對象。所以這基本上是一個新的list of Integers

+0

好的解釋!非常感謝! –