2011-03-27 65 views
0

如何處理Java中的別名?一個簡單的解決方案是讓我們說一個ArrayList的副本,但是當我嘗試寫代碼時,我的數據不斷被新添加的數據覆蓋。詳細介紹:Java集合和別名

ArrayList<ArrayList> temp = new ArrayList<ArrayList>() ; 
ArrayList<ArrayList> personRecord = new ArrayList<ArrayList>() ; 
ArrayList<String> personDetail = new ArrayList<String>() ; 

... 

while (input.hasNextLine()) 
    { 
     String line = input.nextLine() ; 

     String [] tokens = line.split(" ", 0) ; 


     for (String s: tokens) 
     {  
      personDetail.add(s) ; 
     } 

     temp.add(personDetail) ; 

     personRecord.addAll(temp) ; 

     temp.clear() ; 
     personDetail.clear() ; 
    } 

輸出:的

[[Peter, M, 1972], [Peter, M, 1972]] 

代替:

[[Peter, M, 1972], [Anne, F, 1974]] 
+0

什麼是輸入? – 2011-03-27 21:46:15

回答

2

你應該將personDetail創建循環內獲得一個新的ArrayList的每個人:不需要在任何情況下

ArrayList<ArrayList> personRecord = new ArrayList<ArrayList<String>>() ; 

while (input.hasNextLine()) 
    { 
     ArrayList<String> = new ArrayList<String>(); 
     String line = input.nextLine() ; 

     String [] tokens = line.split(" ", 0) ; 


     for (String s: tokens) 
     {  
      personDetail.add(s) ; 
     } 
     personRecord.add(personDetail); 
    } 

temp

+0

非常感謝! – raoulbia 2011-03-27 22:06:13

2

看起來你已經習慣了C++的集合! Java中的對象引用是指針(儘管引用語法),集合是指針的集合。添加時,集合從不復制對象。如果你想列出一個列表,然後在循環外部分配列表列表,並在循環內部,在循環頂部分配一個列表。在循環體中填充它,並將其添加到循環底部的列表列表中。而已。沒有臨時需要。