2017-08-24 9 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(tmp)ans.add(new ArrayList<>(tmp))を変更するとことがわかります。それは動作しません...だから私は尋ねたい、なぜですか? ans.add(new ArrayList<>(tmp))ans.add(tmp)の違いは何ですか?これら2つのJava arrayList.add(の違いは何ですか)

答えて

1

ans.add(new ArrayList<>(tmp))を使用すると、リストにaddindの代わりにリストtmpのコピーが作成されます。

ans.add(tmp)を使用して追加すると、リストに加えた変更がtmpになりましたが、そこに入れたリストに反映されます。

関連する問題