繁体   English   中英

如何在Java的ArrayList中存储很多数组?

[英]How can I store a lot of arrays in an ArrayList in Java?

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

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);
        }
    }

产出

[1, 2]
[1, 3]
[1, 4]
[2, 2]
[2, 3]
[2, 4]
[3, 2]
[3, 3]
[3, 4]

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

您可以通过多种方式实现它...

你可以...

使List<int[]> list = new ArrayList<int[]>(); static全局

public class comb {
    static List<int[]> list = new ArrayList<int[]>();
    public static void main(String[] args) {

然后,您可以将值添加到ArrayList

static void combinations(int[] arr, int n, int pos, int[] result) {
    if (n == 0) {
        list.add(result);
        return;
    }

但这通常是一个坏主意,是草率的编程并导致不良习惯

你可以...

List的引用传递给combinations方法...

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;
    }

这样做更好,因为它使该API可重复使用,并且能够在程序的同一实例中多次调用,而又不会破坏List ,就像前面的示例一样

你可以...

combinations方法返回一个List ...

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;
}

这很酷,因为您无需关心List创建方式,只需将List所有arr组合返回到您的规范即可。 它可能不如上一个示例有效,因为您在每个递归上都创建了一个新的List ,但确实隐藏了实现细节

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM