2013-02-14 94 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