在java中向列表集合添加列表
List<List<Integer>> list = new LinkedList<List<Integer>>();
List<Integer> tmp = new LinkedList<Integer>();
tmp.add(2);
list.add(tmp);
tmp.add(3);
list.add(tmp);
列表的结果是[[2,3],[2,3]];
我只是不明白为什么它不是[[2],[2,3]]
。当我使用list.add(new LinkedList<Integer>(tmp))
时,它会起作用。我打印tmp,它仍然是[2], [2,3]
,它没有改变。为什么会这样?
先谢谢你
# 1 楼答案
Java使用对使用
new
创建的对象的引用来引用这些对象。在本例中,变量tmp
实际上是对堆上LinkedList
对象的引用因为
list
是一个对象列表,它实际上是一个对这些对象的引用列表。在本例中,它的两个元素是对同一堆对象的引用,tmp
# 2 楼答案
您将对
tmp
的引用添加到了list
。添加时,tmp
仅包含[2,3]。在添加到list
之后,您向tmp
的同一引用添加了3。这导致两个“副本”都有[2,3]一种方法是创建一个新列表并执行以下操作
现在,列表看起来像[[2],[3]]
如果希望列表为[[2],[2,3]]
如果有什么不清楚,请告诉我