2013-02-14 105 views
1

我想用字符串数组填充列表,但添加到列表的唯一数组是最后一个添加的列表。这似乎被添加到所有列表元素。用字符串数组填充列表

我在做什么错?

String[] indata = new String[2]; 
List<String[]> ls = new ArrayList<String[]>(); 
indata[0]="test1"; 
indata[1]="test2"; 
ls.add(indata); 
indata[0]="test3"; 
indata[1]="test4"; 
ls.add(indata); 
for(int index=0; index < ls.size(); index++) 
     System.out.println("ZZZZZZZZZZZZ----->> " + index + "  " + Arrays.toString(ls.get(index))); 

预期输出:

ZZZZZZZZZZZZ----->> 0  [test1, test2] 
ZZZZZZZZZZZZ----->> 1  [test3, test4] 

实际输出:

ZZZZZZZZZZZZ----->> 0  [test3, test4] 
ZZZZZZZZZZZZ----->> 1  [test3, test4] 
+0

您需要为添加到列表中的每个数组创建新的String数组 – nhahtdh 2013-02-14 09:17:41

+0

如果要添加文字字符串,请以简写方式编写。 http://ideone.com/bonDwJ – nhahtdh 2013-02-14 09:24:37

回答

3

应该是:

String [] indata = new String [2]; 
List <String []> ls = new ArrayList <String []>(); 
indata [0] = "test1"; 
indata [1] = "test2"; 
ls.add (indata); 
indata = new String [2]; // This line added 
indata [0] = "test3"; 
indata [1] = "test4"; 
ls.add (indata); 

当你做ls.add (indata)到您的数组的引用存储在名单,但不是警察y的阵列。因此,在这之后,ls.get (0)indata指向相同的数组实例,并且使用indata [0] = "test3"修改第一个元素(该数组将与indata [0] = "test3"一起使用将会改变您使用ls.get (0)[0]所看到的内容。

+0

太好了,非常感谢你!这使得IT!/Claes – user1912657 2013-02-14 09:35:43

0

当你创建一个对象,并将其添加到列表中,对象没有被复制到list.Instead现有的对象是被添加到该list.So的参考,当你这样做:

String[] indata = new String[2]; 
List<String[]> ls = new ArrayList<String[]>(); 
indata[0]="test1"; 
indata[1]="test2"; 
ls.add(indata); 

indata和ls.get(0)都指向同一个对象。

在这里,您将再次修改由indata指向的数据以添加第二个数组。因此ls.get(0)也指向更新的数据。

为了添加新数组,需要创建新数组并将其添加到列表中。

+0

非常好,谢谢你澄清这个! – user1912657 2013-02-14 09:38:20