如何在二维arrayList

时间:2016-06-29 16:44:00

标签: java arraylist

我有以下

ArrayList<ArrayList<Integer>> row = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> column = new ArrayList<Integer>();
for(int i = 0; i < 12; i++) {
    column.add(0);
}
for(int j=0; j < 12 ; j++) {
    row.add(column);
}

它给了我

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

我想要的是替换arrayList中的特定索引。让我们说第3个索引的第二个数组,其中包含9个。

row.get(2).set(3, 9);

但是上面用9代替整个列。我应该如何将arrayList设置为特定而不影响其他行。

3 个答案:

答案 0 :(得分:5)

您目前添加了12次相同的精确列,但是您应该添加12个不同的列,所有这些都最初以相同的方式形成:

ArrayList<ArrayList<Integer>> row = new ArrayList<ArrayList<Integer>>();

for(int j=0; j < 12 ; j++) {
    ArrayList<Integer> column = new ArrayList<Integer>();
    for(int i = 0; i < 12; i++) {
        column.add(0);
    }
    row.add(column);
}

答案 1 :(得分:1)

这是因为您添加了ArrayList的同一个实例,因为您需要先创建一个副本,否则您的所有列都会受到修改的影响:

for(int j=0; j < 12 ; j++) {
    row.add(new ArrayList<>(column));
}

答案 2 :(得分:1)

它不会替换所有值,它只会替换一个值。您的问题是ArrayList列表的所有12个元素都引用了相同的列列表。

您需要为每一行创建 new 列列表。

此外,索引从零开始,因此要设置第三个索引的第二个arrayList,您需要指定索引1和2,而不是2和3。

如果你知道矩阵的确切大小,你应该使用常规数组,而不是{{1}}。