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]

关于如何将每个数组添加到我的数组列表的任何想法?

4

5 回答 5

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);
于 2013-08-16T16:08:03.130 回答
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[]您正在做的每一种方式进行格式化。

于 2013-08-16T16:07:55.280 回答
2

这是因为您将 t2 添加到所有条目中。每次覆盖 t2 时,您都会更改所有值。这是因为 t2 不是按值传递,而是按引用传递并按引用保存。

于 2013-08-16T16:09:07.710 回答
1

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

相反,您可以为 List 中的每个元素创建一个新数组:

 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);
于 2013-08-16T16:08:29.267 回答
1

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

于 2013-08-16T16:15:23.223 回答