Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中的ArrayList中存储大量数组?_Java_Arrays_List_Arraylist - Fatal编程技术网

如何在Java中的ArrayList中存储大量数组?

如何在Java中的ArrayList中存储大量数组?,java,arrays,list,arraylist,Java,Arrays,List,Arraylist,我有一个函数,它通过递归打印输入数组的每个数字组合 public class comb { public static void main(String[] args) List<int[]> list = new ArrayList<int[]>(); int[] test = {1,2,3,4}; combinations(test,2,0,new int[2]); listToStrin

我有一个函数,它通过递归打印输入数组的每个数字组合

public class comb {
    public static void main(String[] args)

        List<int[]> list = new ArrayList<int[]>();


        int[] test = {1,2,3,4};
        combinations(test,2,0,new int[2]);

        listToString(list);
    }


    static void combinations(int[] arr, int n, int pos, int[] result){
        if(n == 0){
            System.out.println(Arrays.toString(result));
            return;
        }
        for(int i = pos; i <= arr.length - n; i++){
            result[result.length - n] = arr[i];
            combinations(arr,n-1,pos+1,result);
        }
    }

如果我不希望打印每个数组,而是希望将其添加到列表中,该怎么办?我不能只将结果添加到列表中,因为它不断变化。

您可以复制数组,然后将副本添加到列表中

static void combinations(int[] arr, int n, int pos, int[] result, List<int[]> allResults){
    if(n == 0){
        allResults.add(Arrays.copyOf(result));
        return;
    }
    // etc...
静态无效组合(int[]arr、int n、int pos、int[]result、List allResults){
如果(n==0){
add(Arrays.copyOf(result));
返回;
}
//等等。。。

实现这一目标的方法有多种

你可以。。。 使
List List=new ArrayList();
a
static
global

public class comb {
    static List<int[]> list = new ArrayList<int[]>();
    public static void main(String[] args) {
但这通常是一个坏主意,是草率的编程,并导致坏习惯

你可以。。。 将
列表
的引用传递给
组合
方法

static void combinations(int[] arr, int n, int pos, int[] result, List<int[]> list) {
    if (n == 0) {
        list.add(Arrays.copyOf(result, result.length));
        return;
    }

这有点酷,因为您不需要关心
列表
是如何创建的,只需要它将
arr
的所有组合返回到您的规范中。它可能没有前面的示例那么有效,因为您在每个递归上创建一个新的
列表
,但确实隐藏了实现关于细节

可能是我,但我相信需要一个
newLength
参数。我会原谅你的,因为我也错过了;)
static void combinations(int[] arr, int n, int pos, int[] result) {
    if (n == 0) {
        list.add(result);
        return;
    }
static void combinations(int[] arr, int n, int pos, int[] result, List<int[]> list) {
    if (n == 0) {
        list.add(Arrays.copyOf(result, result.length));
        return;
    }
static List<int[]> combinations(int[] arr, int n, int pos, int[] result) {
    List<int[]> list = new ArrayList<>(25);
    if (n == 0) {
        list.add(Arrays.copyOf(result, result.length));
    } else {
        for (int i = pos; i <= arr.length - n; i++) {
            result[result.length - n] = arr[i];
            list.addAll(combinations(arr, n - 1, pos + 1, result));
        }
    }
    return list;
}