是否可以在Java中使用n维数组而无需明确指定维数?
即。如果我想要一个2D数组,我会这样做:
int[][] myArray = new int[a][b];
对于上述情况,我必须指定myArray
变量的类型为int[][]
。我要问的是,是否有可能声明一个n维数组的变量,而不必提前知道n。
即。如果我有变量test
,test
可以是int[][]
或int[][][]
或int[][][][][][][][][][][]
类型,那么您就明白了。我只是想定义测试而不必定义维数。
我确信上面的那种打破了Java中的类型系统所以我对任何想法持开放态度,因为我认为我接近这个错误的方式。
为了给你一些上下文,我已经开发了一种算法来查找整数的二维数组中的整数,这些整数按行和列按升序排序。我注意到它可以与任何维度数组一起使用,因此可以使它更通用。但是,我并不喜欢为每个可能的数组维度定义一个函数作为参数传递,因为维度可能(不太可能)从1D到infinityD - 因此问题。
这也仅仅是出于我自己的好奇心,是否可以对任何维度数组进行此操作。我不知道是否可以使用Java的内置工具来完成这项工作,而且在这种情况下,我可以更好地构建自己的类系统来支持多维数组。 / p>
答案 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;
}
}
这不是一个工人阶级,只是一个想法,创建整个结构是你自己的。您需要实现所有索引和空检查。