我试图初始化一个与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]”。
答案 0 :(得分:1)
编辑:更正了java.util.Collections.copy()的参数列表
=
不会创建任何类型的新实例,而只是复制一个指针。在您的代码中,listOfLists.get(0)
,listBuffer
和listBuffer2
指向相同的存储区域,因此将它们链接在一起就不足为奇了。如果您不想链接它们,请不要链接它们。我就是这么简单。
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>();