Java中的未知n多维数组

时间:2017-03-15 13:13:07

标签: java arrays multidimensional-array

是否可以在Java中使用n维数组而无需明确指定维数?

即。如果我想要一个2D数组,我会这样做:

int[][] myArray = new int[a][b];

对于上述情况,我必须指定myArray变量的类型为int[][]。我要问的是,是否有可能声明一个n维数组的变量,而不必提前知道n。

即。如果我有变量testtest可以是int[][]int[][][]int[][][][][][][][][][][]类型,那么您就明白了。我只是想定义测试而不必定义维数。

我确信上面的那种打破了Java中的类型系统所以我对任何想法持开放态度,因为我认为我接近这个错误的方式。

为了给你一些上下文,我已经开发了一种算法来查找整数的二维数组中的整数,这些整数按行和列按升序排序。我注意到它可以与任何维度数组一起使用,因此可以使它更通用。但是,我并不喜欢为每个可能的数组维度定义一个函数作为参数传递,因为维度可能(不太可能)从1D到infinityD - 因此问题。

这也仅仅是出于我自己的好奇心,是否可以对任何维度数组进行此操作。我不知道是否可以使用Java的内置工具来完成这项工作,而且在这种情况下,我可以更好地构建自己的类系统来支持多维数组。 / p>

1 个答案:

答案 0 :(得分:0)

您无法将数组定义为未知维度。但是您可以创建自己的类,如NDimensionalArray,它将包装另一个NDimensionalArray实例的数组,并实现getter,如getValue(int indices ...)和dimension()

class NDimensionalArray {
    NDimensionalArray[] arrays;

    int value;

    int getValue(int... indexes) {
        if (indexes.length == 0) return value;
        return arrays[indexes[0]].getValue(indexes[1],indexes[2],...,indexes[n-1]);
    }

    void setValue(int value, int... indexes) {
        // implement simillary to getValue
    }

    int getDimension() {
        if (arrays == 0 || arrays.length == 0) return 0;
        return arrays[0].getDimension() + 1;
    }
}

这不是一个工人阶级,只是一个想法,创建整个结构是你自己的。您需要实现所有索引和空检查。