繁体   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