Collections 爪哇收藏及;混叠

Collections 爪哇收藏及;混叠,collections,aliasing,Collections,Aliasing,如何处理Java中的别名?一个简单的解决方案是复制ArrayList,但当我试图编写代码时,我的数据总是被新添加的数据覆盖。详细内容: ArrayList<ArrayList> temp = new ArrayList<ArrayList>() ; ArrayList<ArrayList> personRecord = new ArrayList<ArrayList>() ; ArrayList<String> personDetail

如何处理Java中的别名?一个简单的解决方案是复制ArrayList,但当我试图编写代码时,我的数据总是被新添加的数据覆盖。详细内容:

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], [Anne, F, 1974]]

看起来你已经习惯C++收藏了!Java中的对象引用是指针(尽管引用语法不同),集合是指针的集合。集合在添加对象时从不复制对象。如果要创建列表列表,则在循环外部分配列表列表,在循环内部,在循环顶部分配单个列表。在循环体中填充它,并将其添加到循环底部的列表列表中。就这样。不需要临时列表。

您应该将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);
     }
ArrayList personRecord=new ArrayList();
while(input.hasNextLine())
{
ArrayList=新的ArrayList();
String line=input.nextLine();
String[]tokens=line.split(“,0);
for(字符串s:标记)
{       
personDetail.add(s);
}
personRecord.add(personDetail);
}
temp
在任何情况下都不需要

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);
     }