java增加数组中的维度

时间:2012-11-09 22:04:09

标签: java multidimensional-array arraylist dimensions

是否有可能(我确定它是)并且不太复杂,无法制作动态多维数组,如果需要可以增加维数?

// Array[] 1 has 2 dimensions
if(blah=blah)
{
   Array[] 1 gets second dimension and is now Array[][]
}

1 个答案:

答案 0 :(得分:5)

不,这是不可能的:数组的维数是数组类型的属性,而不是数组对象的属性,所以你不能这样做内置Java数组。

为了模拟可以在运行时更改维数的数组,您需要构建自己的类。您可以将该类基于数组或ArrayList,但是会有一个限制:您将无法在模拟数组上使用下标运算符。

还有“丑陋”的解决方案:您可以在没有类型的情况下存储数组 - 实质上是无类型Object。您可以将具有任意维数的数组分配给类型为Object的变量,如下所示:

Object a = new int[10];
a = new int[10][2];
a = new int[10][2][5];

问题是,如果不执行强制转换,则无法访问此类数组的元素:

a[2][1][0] = 7; // Will not compile

这将编译和工作,但构造是相当难以理解的:

((int[][][])a)[2][1][0] = 7;

另请注意,除非您复制该数组,否则数组的先前内容将在重新分配时丢失。