Okey,在我的程序中,我创建了ArrayLists的LinkedList:
List<Marker> list1 = new ArrayList<Marker>();
LinkedList<List<Marker>> list2 = new LinkedList<List<Marker>>();
将项目添加到list1时,一切正常:list1.add(mark);
但是当我尝试将list1添加到list2(list2.add(list1)
)时,我发现了一些奇怪的事情:
list2中的每个列表大小都等于最后添加的列表大小+ 1,我甚至无法用(例如)list2.getFirst().get(0);
读取这些列表项 - 这样做我得到了错误;
例如我这样做:
mark.addSomeInfo();
list1.add(mark);
list2.add(list1);
mark.addSomeInfo();
list1.add(mark);
list2.add(list1);
mark.addSomeInfo();
list1.add(mark);
list2.add(list1);
我需要得到这个:
list2.get(0).size() = 1;
list2.get(1).size() = 2;
list2.get(2).size() = 3;
但相反,我得到了这个:
list2.get(0).size() = 4;
list2.get(1).size() = 4;
list2.get(2).size() = 4;
为什么呢?我做错了什么?
答案 0 :(得分:1)
LinkedList<List<Marker>> list2
add
方法不会创建您添加到其中的列表的副本。它只会将list1
的引用添加到list2
。所以实质上你的list2
拥有对同一个列表的3个引用。
您要做的是在将照片放入list2
mark.addSomeInfo();
list1.add(mark);
list2.add(new ArrayList<Mark>(list1));
mark.addSomeInfo();
list1.add(mark);
list2.add(new ArrayList<Mark>(list1));
mark.addSomeInfo();
list1.add(mark);
list2.add(new ArrayList<Mark>(list1));
答案 1 :(得分:1)
LinkedList
的所有引用都引用相同的List
对象list1
,因此它会打印大小为4.
正如您使用支持重复元素的ArrayList
所以每次添加标记对象时,它都会重复输入。
答案 2 :(得分:1)
List2中的引用是针对List1的。这就是为什么所有相同的SOP给出相同的结果4
答案 3 :(得分:1)
list1
只是代码中的引用。实质上,您是一次又一次地向arraylist
添加相同的linkedlist
对象。最后,在您的示例中,相同的arraylist
被复制3次,并且大小为4。
答案 4 :(得分:0)
在list2的第0位,第1位和第2位,添加了相同的list1对象。 正在改变
list1.add(mark);
由于上面的函数已经在你的代码中调用了四次.Hence list1引用现在指向堆上有4个项目的对象,因此 list1的所有3项的大小都有4个元素。
答案 5 :(得分:0)
mark.addSomeInfo();
list1.add(mark); //this gets added to list each time you add it --1
list2.add(list1); //this gets added too as many times as you add list1
mark.addSomeInfo();
list1.add(mark); // 2
list2.add(list1); //2
mark.addSomeInfo();
list1.add(mark); // 3
list2.add(list1); // 3
所以在此之后你将在list1中有3个元素,在list2中有3个列表