public class BusInformation {
String BusRoute[][] = new String[4][];
BusRoute[0] = new String[] {"a" , "b", "c"};
BusRoute[1] = new String[] {"a" , "b"};
}
我知道第一个参数中有多少BusRoutes。第二个参数大小是可变的,取决于路线。 如何以这种方式初始化它?
答案 0 :(得分:1)
你应该能够像这样编码......
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数组只是一个普通的一维数组,其中每个项目都是任意长度的数组。即使您将2D数组设置为初始大小(例如new String[4][5]
),它也不会有任何区别 - 您仍然可以为基本数组的每个项目分配更小或更大的数组,就像您已经在做的那样
答案 1 :(得分:0)
如果大小在初始化时是可变且未知的,那么数组可能不是最佳选择。我有两个建议,一个使用Lists
数组或使用Guava的Multimap
如果你真的想要/需要继续使用二维数组,请按照上面的描述进行初始化(使用第一组元素或作为空数组),当需要添加值时,使用{{3使用新大小创建数组的副本以允许添加新元素。
答案 2 :(得分:0)
如果您询问硬连线初始化,您的代码可以更简洁地编写:
public class BusInformation {
String BusRoute[][] = new String[][]{
{"a" , "b", "c"},
{"a" , "b"},
null,
null
};
}
但请注意,构造函数的方法可以执行的初始化有很多限制。 (这与方法的字节码必须符合64k字节的事实有关。)
如果你问的是从文件中读取的东西(例如)初始化数组,那么基本上要解决数组需要多大,创建它们以及填充它们的值。 (例如,您可能会将数据读入列表列表,然后转换为二维数组形式。