在构造时有选择地分配多维数组的尺寸

时间:2013-01-30 22:55:01

标签: java multidimensional-array

Java支持多维数组,表示为“数组数组”。例如,我可以使用以下代码创建一个String数组数组:

int rows = ...
int cols = ...
String[][] array2d = new String[rows][cols];

我想做的是让第二个维度“消失”。换句话说,像for(String[] array : array2d) System.err.println(array);这样的for循环会打印出来:

null
...
null

我之所以这样做,是因为我已经分配了一堆String[]个实例,我想放入array2d。我有几个解决方案,但由于以下原因,两者似乎都不是最佳的:

解决方案1 ​​

我可以像String[][] array2d = new String[rows][0]这样做,使用for循环来取消第一个维度,然后再填充行,但这对我来说似乎很难看,因为Java会创建一个新的空{{1}对于每一行,我真的不需要它。

解决方案2

我也可以执行String[]之类的操作,但这更糟糕,因为我必须通过代码括号中的代码部分对String[][] array2d = new String[][]{null, null, ... null}的第一维的长度进行硬编码,这很令人作呕。< / p>

我认识到这不是一个大问题,特别是当维度很小时,任何值得他的盐的程序员都会选择其他构造来创建多维度的数组。如果有一种方法可以在构造中部分分配多维数组的维度,我大多只是好奇。

1 个答案:

答案 0 :(得分:5)

最简单的解决方案:

int rows = ...
String[][] array2d = new String[rows][];

如果您没有初始化第二个维度,则数组将在维度1中包含null个条目。