2017-08-24 182 views
0
public void findCombination(List<List<Integer>> ans, ArrayList<Integer> tmp, int [] candidates, int remain, int start){ 
    if(remain < 0){ 
     return ; 
    } 
    else if(remain == 0){ 
     ans.add(new ArrayList<>(tmp)); 
    } 
    else{ 
     for(int i = start; i < candidates.length; i++){ 
      tmp.add(candidates[i]); 
      findCombination(ans, tmp, candidates, remain-candidates[i], i); 
      tmp.remove(tmp.size()-1); 
     } 
    } 
} 

在上面的代碼中,我發現當我把ans.add(new ArrayList<>(tmp))更改爲ans.add(tmp)。它不會工作...所以我想問,爲什麼? ans.add(new ArrayList<>(tmp))ans.add(tmp)之間有什麼區別。這兩個java有什麼區別arrayList.add()

回答

1

區別在於,當您使用ans.add(new ArrayList<>(tmp))時,您正在創建列表tmp的副本,而不是將其添加到列表中。

如果使用ans.add(tmp)添加它,則對列表tmp所做的任何更改都會反映在您放入的列表中。