创建数组数组(2D)而不用Java初始化内部数组

时间:2015-04-14 04:27:44

标签: java c++ arrays multidimensional-array

我想从N(一维)数组构建一个2D数组。唯一的问题是,据我所知,在Java中声明多维数组的唯一方法是要求您指定所有内部维度大小,并创建这些子数组。在这种情况下,这似乎是浪费,因为它们将被覆盖

在C ++中,我可以这样做:

Object** arr = new Object*[n];

for(int i=0;i<n; ++i)
{
      arr[i] = getObjArr();
}

在Java中,你必须这样说:

Object[][] arr = new Object[n][0]; //inner dimension is required

将创建n个零长度数组中的每一个,但只有在填充数组时才会被覆盖。有没有办法在不分配内部数组的情况下声明一个多维数组(类似于指向C的指针语法的指针)?

2 个答案:

答案 0 :(得分:2)

不确定。我不知道为什么你认为你必须这样做!

   double[][] foo = new double[2][];

非常好。 “内部”数组将为null。

答案 1 :(得分:1)

必须指定内部尺寸。这在Java中是合法的:

Object[][] arr = new Object[n][];

这会创建一个n元素数组,其中每个元素都有Object[]类型。由于您未指定内部维度,因此这些n元素都已初始化为null。然后,您可以将任何Object[]分配给任何n数组元素。

对于更高维数组,规则(如果您没有初始化程序)是您可以说new T后跟一个或多个指定维([some-value]),然后是对于未指定的维度,零个或多个[]。您无法[]后跟[value]