Java N维数组

Java N维数组,java,constructor,multidimensional-array,Java,Constructor,Multidimensional Array,我需要有一个n维字段,其中n是基于构造函数的输入。但我甚至不确定这是否可能。是吗?快速解决方案:您可以使用非通用的ArrayListofArrayListof。。。尽可能深入。然而,这可能会让快速使用变得很尴尬 另一种需要更多工作的方法是使用底层平面数组表示实现您自己的类型,您可以在其中内部计算索引,并提供带有vararg参数的访问器方法。我不确定它是否完全可行,但可能值得一试 粗略示例(未经测试、无溢出检查、错误处理等,但希望传达基本思想): 类NDimensionalArray{ 私有对象[

我需要有一个n维字段,其中n是基于构造函数的输入。但我甚至不确定这是否可能。是吗?

快速解决方案:您可以使用非通用的
ArrayList
of
ArrayList
of。。。尽可能深入。然而,这可能会让快速使用变得很尴尬

另一种需要更多工作的方法是使用底层平面数组表示实现您自己的类型,您可以在其中内部计算索引,并提供带有vararg参数的访问器方法。我不确定它是否完全可行,但可能值得一试

粗略示例(未经测试、无溢出检查、错误处理等,但希望传达基本思想):

类NDimensionalArray{
私有对象[]数组;//N维数组的内部表示
私有int[]维度;//数组的维度
私有int[]乘数;//用于计算内部数组中的索引
nDimensional数组(整数…维数){
int-arraySize=1;
乘数=新整数[dimensions.length];
对于(int idx=dimensions.length-1;idx>=0;idx--){
乘数[idx]=阵列化;
数组化*=维度[idx];
}
数组=新对象[arraySize];
这一点。尺寸=尺寸;
}
...
公共对象获取(int…索引){
assert index.length==dimensions.length;
内部索引=0;
for(int idx=0;idx
这是一篇很好的文章,解释了如何在运行时使用反射创建数组:。这篇文章解释了如何创建一维数组,但也包含了另一个创建多维数组的
newInstance
方法。例如:

int[] dimensions = { 10, 10, 10 }; // 3-dimensional array, 10 elements per dimension
Object myArray = Array.newInstance(String.class, dimensions); // 3D array of strings
由于维度的数量在运行时之前是未知的,因此只能将数组作为
对象处理
,并且必须使用
array
类的
get
set
方法来操作数组的元素。

尝试以下操作:


你能澄清一下你想要什么吗?在你的问题中很容易理解四到五种不同的需求……我不确定使用get/set是否太慢而无法使用。如果您处理的是最后一个维度,并且成员是基元,则始终可以将其强制转换为Object[]或基元数组。然而,我无法想象如何使用这样一个未知维数组。即使是简单的迭代,也意味着使用未知数量的嵌套循环。我会考虑创建O一维数组,然后使用HORER方案计算索引,比如“代码> I1+DIM1+(I2+DIM2*(…))< /代码>,这可以用一个简单的循环来完成。然而,您的解决方案可能比这样做可能导致的混乱的通用规范更干净(即。List@John,它甚至不适用于泛型,因为您无法在运行时组装/更改泛型类型参数。例如,对于3维,最外层的列表需要是
列表
,而对于7维,则需要
列表
。同样,所有元素(即内部列表)将是不同的类型-只是不能以统一的方式在代码中处理它。
int[] dimensions = { 10, 10, 10 }; // 3-dimensional array, 10 elements per dimension
Object myArray = Array.newInstance(String.class, dimensions); // 3D array of strings