0
public class BusInformation {

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

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

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

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

4

3 回答 3

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 数组设置为初始大小,例如new String[4][5],也不会产生任何影响 - 您仍然可以将更小或更大的数组分配给基本数组的每个项目,就像您已经在做的那样。

于 2012-10-25T12:28:21.873 回答
0

如果大小在初始化时是可变的并且未知,那么数组可能不是这里的最佳选择。我有两个建议,一个使用数组Lists或使用 Guava 的Multimap

如果您真的想/需要继续使用二维数组,请按上述方式对其进行初始化(使用第一组元素或作为空数组),当您需要添加值时,使用Arrays.copyOf创建一个具有新大小的数组副本以允许添加新元素。

于 2012-10-25T12:33:29.190 回答
0

如果您询问的是硬连线初始化,您的代码可以更简洁地编写如下:

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.

于 2012-10-25T12:36:04.853 回答