2013-08-16 350 views
5

我想创建一个数组列表的字符串数组。当我完成后,我想阵列列表看起来像这样:创建阵列的数组列表

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

我试图定义一个数组,然后将其添加到数组列表中。然后重新定义一个数组并重新添加它。但数组列表似乎只包含最后一个条目。请看:

String[] t2 = new String[2]; 

ArrayList<String[]> list2 = new ArrayList<String[]>(); 

t2[0]="0"; 
t2[1]="0"; 
list2.add(t2); 
t2[0]="0"; 
t2[1]="1"; 
list2.add(t2); 
t2[0]="1"; 
t2[1]="0"; 
list2.add(t2); 
t2[0]="1"; 
t2[1]="1"; 
list2.add(t2); 

for (String[] tt : list2) 
{ 
System.out.print("["); 
for (String s : tt) 
System.out.print(s+" "); 
System.out.print("]"); 
} 

输出是:

[1,1] [1,1] [1,1] [1,1]

如何每个阵列添加到我的数组列表中的任何想法`

+0

人们已经回答了你的问题,只是一个评论你为什么不这样做? list2.add(new String [] {“1”,“0”}); –

回答

6

问题是,您要将相同的对象添加到ArrayList的每个索引。每次修改它时,都会修改同一个对象。要解决该问题,您必须将引用传递给不同的对象。

String[] t2 = new String[2]; 

ArrayList<String[]> list2 = new ArrayList<String[]>(); 

t2[0]="0"; 
t2[1]="0"; 
list2.add(t2); 

t2 = new String[2]; // create a new array 
t2[0]="0"; 
t2[1]="1"; 
list2.add(t2); 

t2 = new String[2]; 
t2[0]="1"; 
t2[1]="0"; 
list2.add(t2); 

t2 = new String[2]; 
t2[0]="1"; 
t2[1]="1"; 
list2.add(t2); 
4

您要添加的同一阵列t2结束了吗?并结束。你需要添加不同的数组。

ArrayList<String[]> list2 = new ArrayList<String[]>(); 

list2.add(new String[] {"0", "0"}); 
list2.add(new String[] {"0", "1"}); 
list2.add(new String[] {"1", "0"}); 
list2.add(new String[] {"1", "1"}); 

顺便说一句:你可以使用Arrays.toString(tt)循环内每个String[]你正在做的方式进行格式化。

1

您只创建一个数组,并将其引用重复放入ArrayList中。

相反,你可以在列表中的每个元素创建一个新的数组:

ArrayList<String[]> list2 = new ArrayList<String[]>(); 

String[] t2; 

t2 = new String[2]; 
t2[0]="0"; 
t2[1]="0"; 
list2.add(t2); 

t2 = new String[2]; 
t2[0]="0"; 
t2[1]="1"; 
list2.add(t2); 

t2 = new String[2]; 
t2[0]="1"; 
t2[1]="0"; 

t2 = new String[2]; 
list2.add(t2); 
t2[0]="1"; 
t2[1]="1"; 
list2.add(t2); 
2

这是因为你要添加t2到所有条目。每次覆盖t2时,你都在改变所有的值。这是因为t2没有被值传递,它是通过引用传递并通过引用保存的。

1

您只有一个项目(t2),并且每次将其添加到ArrayList。实际上t2的引用将保存在ArrayList中,因此当您更改t2值时,ArrayList中的所有引用都会生效。