0

你如何处理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], [Peter, M, 1972]]

代替:

[[Peter, M, 1972], [Anne, F, 1974]]
4

2 回答 2

1

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

于 2011-03-27T21:43:54.910 回答
1

您应该将 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在任何情况下都不需要。

于 2011-03-27T21:52:10.660 回答