初始化未知大小的多维/锯齿状字符串数组

时间:2012-10-25 12:27:10

标签: java multidimensional-array

public class BusInformation {

String BusRoute[][] = new String[4][];

BusRoute[0] = new String[] {"a" , "b", "c"};

BusRoute[1] = new String[] {"a" , "b"};
}

我知道第一个参数中有多少BusRoutes。第二个参数大小是可变的,取决于路线。 如何以这种方式初始化它?

3 个答案:

答案 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字节的事实有关。)

如果你问的是从文件中读取的东西(例如)初始化数组,那么基本上要解决数组需要多大,创建它们以及填充它们的值。 (例如,您可能会将数据读入列表列表,然后转换为二维数组形式。