簡體   English   中英

java將新元素添加到arraylist

[英]java add new element to an arraylist

我有以下代碼用於問題“給出一組不同的整數,返回所有可能的子集。如果nums = [1,2,3] ,則解決方案為[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ] 。”

public class Solution {
public ArrayList<ArrayList<Integer>> subsets(int[] num) {
    ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
    if(num == null || num.length == 0) {
        return result;
    }
    ArrayList<Integer> list = new ArrayList<Integer>();
    Arrays.sort(num);  
    subsetsHelper(result, list, num, 0);

    return result;
}


private void subsetsHelper(ArrayList<ArrayList<Integer>> result,
ArrayList<Integer> list, int[] num, int pos) {

    result.add(new ArrayList<Integer>(list));

    for (int i = pos; i < num.length; i++) {
        list.add(num[i]);
        subsetsHelper(result, list, num, i + 1);
        list.remove(list.size() - 1);
    }
}

result.add(new ArrayList<Integer>(list))為什么我需要使用new ArrayList<Integer>(list)) 我知道簡單地使用result.add(list)可以使結果中的項目完全一樣,但是我想知道原因。

 new ArrayList<Integer>(list) 

這被稱為拷貝構造函數 ,“ 它用於創建相同類的現有對象的拷貝。

如果沒有復制構造函數,則每次對result.add(list)調用都會將對同一列表的引用重復添加到result 使用copy構造函數,將使用list的當前值創建一個新list 這樣, subsetHelper()可以重復修改list而無需更改已經存儲在result的列表。

確保您了解Java如何傳遞方法參數 這並不復雜,但是對於成為一名有效的Java程序員而言至關重要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM