2011-03-27 72 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中的对象引用是指针(尽管引用语法),集合是指针的集合。添加时,集合从不复制对象。如果你想列出一个列表,然后在循环外部分配列表列表,并在循环内部,在循环顶部分配一个列表。在循环体中填充它,并将其添加到循环底部的列表列表中。而已。没有临时需要。