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

Cod*_*ind 0 java multidimensional-array

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

int rows = ...
int cols = ...
String[][] array2d = new String[rows][cols];
Run Code Online (Sandbox Code Playgroud)

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

null
...
null
Run Code Online (Sandbox Code Playgroud)

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

解决方案1

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

解决方案2

我也可以做类似的事情String[][] array2d = new String[][]{null, null, ... null},但这更糟糕,因为我必须array2d通过括号中的代码部分硬编码第一维的长度,这是令人作呕的.

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

jlo*_*rdo 5

最简单的解决方案:

int rows = ...
String[][] array2d = new String[rows][];
Run Code Online (Sandbox Code Playgroud)

如果未初始化第二个维,则数组将具有null维1中的条目.