通过获取List <List <String >>()的成员而不链接它们来创建新的List <String>()

时间:2019-08-02 15:30:08

标签: java list

我试图初始化一个与List<String>listBuffer成员相等的List<List<String>>listOfLists,但不链接它们。每次我添加到“ listBuffer”时,它都会自动添加到“ listOfLists”的该成员中。如何创建未链接到“ listOfLists”的“ listBuffer”?     //最初的问题

    List<List<String>>listOfLists = new ArrayList<List<String>>();
    listOfLists.add(new ArrayList<String>());
    List<String>listBuffer = listOfLists.get(0);
    List<String>listBuffer2 = listBuffer;//2ndBufferAttempt
    listBuffer.add("anyString");
    listBuffer2.add("anyString2");
    System.out.println(listOfLists.get(0));
    //Output is [anyString,anyString2]

    //Simple Solution(Not sure whether its the best way)
    List<List<String>>listOfLists = new ArrayList<List<String>>();
    listOfLists.add(new ArrayList<String>());
    List<String>listBuffer = new ArrayList<String>();
    listBuffer.addAll(listOfLists.get(0));
    listBuffer.add("anyString");
    System.out.println(listOfLists.get(0));
//Output is "[]"

我希望输出为“ []”。 输出改为“ [anyString,anyString2]”。

2 个答案:

答案 0 :(得分:1)

编辑:更正了java.util.Collections.copy()的参数列表

=不会创建任何类型的新实例,而只是复制一个指针。在您的代码中,listOfLists.get(0)listBufferlistBuffer2指向相同的存储区域,因此将它们链接在一起就不足为奇了。如果您不想链接它们,请不要链接它们。我就是这么简单。

List<String>listBuffer;
List<String>listBuffer2;
Collections.copy(listBuffer, listOfLists.get(0));
Collections.copy(listBuffer2, listBuffer);//2ndBufferAttempt

创建新的,独立的,未链接的列表;应该可以完成工作。

答案 1 :(得分:-1)

无论您从哪里获得资源,都以某种方式链接到listOfLists。也许您可以显示base声明以更清楚。

编辑:如果您希望将其他列表分开,而不是从其他位置获取列表,请执行以下操作:

List<String> listBuffer = new ArrayList<String>();