在Java中初始化arraylist的三维数组

时间:2011-11-28 15:39:53

标签: java arrays arraylist

我有一个多维数组,如:

private static ArrayList [] [] pVTable = new ArrayList [35] [12];

我第一次尝试初始化它是:

for (ArrayList[] x : pVTable) {
    for (ArrayList y : x) {
        y = new ArrayList<TableValue>();
    }
}

哪个不起作用。

我最终手动完成了这项工作,如:

for ( int i = 0; i < pVTable.length; i++) {
    for ( int j = 0; j < pVTable[0].length; j++) {
        pVTable [i] [j] =  new ArrayList<TableValue>();
    }
}

工作正常。

虽然我有一个解决方案,但我想知道为什么第一个(更优雅的)代码不能做同样的工作?

4 个答案:

答案 0 :(得分:1)

在第一个示例中,您的代码虽然修改 y 更改 x

答案 1 :(得分:1)

你正在将ArrayList(集合api的一部分)与Arrays混合在一起,这对我来说相当混乱(对我而言)

我会建议这样的事情:

List<Point> myShape =  new ArrayList<Point>;

其中point包含两个代表X和Y的整数。

答案 2 :(得分:1)

在第一个代码段中,如果我们删除foreach运算符(:)的语法糖,则代码转换为:

for (int xIndex = 0; xIndex < pVTable.length; xIndex++) {
    ArrayList[] x = pVTable[xIndex];
    for (int yIndex = 0; yIndex < x.length; yIndex++) {
        ArrayList y = x[yIndex];
        y = new ArrayList<TableValue>();
    }
}

如您所见,实际数组中没有任何内容 - 仅分配给临时y变量。

答案 3 :(得分:0)

第一个的范围不正确。 y只是一个占位符变量。更改它不会更改基础对象,只会更改y引用的对象。您可以在以下代码段中看到相同的问题:

public static  int x = 2;

public static void foo(int y) {
    y = 3;//does nothing outside of foo
}

public static void main(String[] args) {
    System.out.println(x);//prints 2
    foo(x);
    System.out.println(x);//prints 2, x hasn't changed.
}