public class BusInformation {
String BusRoute[][] = new String[4][];
BusRoute[0] = new String[] {"a" , "b", "c"};
BusRoute[1] = new String[] {"a" , "b"};
}
我知道第一个参数中有多少 BusRoutes。第二个参数大小是可变的,取决于路线。我怎样才能以这种方式初始化它?
public class BusInformation {
String BusRoute[][] = new String[4][];
BusRoute[0] = new String[] {"a" , "b", "c"};
BusRoute[1] = new String[] {"a" , "b"};
}
我知道第一个参数中有多少 BusRoutes。第二个参数大小是可变的,取决于路线。我怎样才能以这种方式初始化它?
你应该能够像这样编码它......
public class BusInformation {
String busRoute[][] = new String[4][0];
public BusInformation(){
busRoute[0] = new String[] {"a" , "b", "c"};
busRoute[1] = new String[] {"a" , "b"};
}
}
它与您的代码相同,但喜欢为第二维指定初始大小0
,很明显它没有任何初始大小。我还将数组的加载包装到类构造函数中。
二维数组只是一个普通的一维数组,其中每个项目都是任意长度的数组。即使您将 2D 数组设置为初始大小,例如new String[4][5]
,也不会产生任何影响 - 您仍然可以将更小或更大的数组分配给基本数组的每个项目,就像您已经在做的那样。
如果大小在初始化时是可变的并且未知,那么数组可能不是这里的最佳选择。我有两个建议,一个使用数组Lists
或使用 Guava 的Multimap
如果您真的想/需要继续使用二维数组,请按上述方式对其进行初始化(使用第一组元素或作为空数组),当您需要添加值时,使用Arrays.copyOf创建一个具有新大小的数组副本以允许添加新元素。
如果您询问的是硬连线初始化,您的代码可以更简洁地编写如下:
public class BusInformation {
String BusRoute[][] = new String[][]{
{"a" , "b", "c"},
{"a" , "b"},
null,
null
};
}
但请注意,构造函数的方法可以执行多少初始化是有硬性限制的。(这与方法的字节码必须适合 64k 字节有关。)
If you are asking about initializing the array from (say) stuff read from a file, then it is basically a matter of working out how big the arrays need to be, creating them, and filling in their values. (For instance, you might read the data into a list-of-lists and then convert to the 2-D array form.