我有以下
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设置为特定而不影响其他行。
答案 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}}。