2016-06-29 136 views
1

具体的指标,我有以下我设置二维的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中更换具体指标怎么办。比方说第二个索引的第二个arrayList有一个9.

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

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

+0

您添加*相同的*列12次。每行有 – luk2302

+0

是。这将是12x12 – logger

回答

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); 
} 
+0

哇我不能相信我错过了... – logger

1

这是因为你添加的ArrayList多次相同的情况下,你已经列,则需要通过修改首先创建一个副本下一否则实际上所有的列都将受到影响:

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

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

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

此外,索引从零开始,所以设置第三指数的第二个ArrayList中,你需要指定索引1和2,而不是2和3

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