我有一个列表,我试图用不同的数字填充List
。但是,当我更改从中复制的列表中的数字时,它会在另一个列表中更改它们。有没有办法阻止这种情况发生?
问问题
214 次
3 回答
4
您需要将列表中的值复制到新列表中:
List<Integer> list1 = Arrays.asList(1, 2, 3);
List<Integer> list2 = new ArrayList<String>(list1); // copy the values of list1 into list2
这会将所有值复制list1
到list2
. 然后您可以在list2
不修改的情况下进行更改list1
,反之亦然。
只是为了澄清:
那不会做深拷贝。但是,这不是深/浅复制的问题。这里的问题是 OP 将他的列表传递给另一种方法,然后惊讶地发现他的列表已经添加/删除了数字。
于 2012-06-27T18:45:17.390 回答
3
这两个列表包含对相同编号对象的引用。更改第一个列表中的数字,您将更改第二个列表引用的同一对象。
要使用独立的数字副本维护两个列表,您需要复制列表,例如使用Collections.copy
.
于 2012-06-27T18:46:17.613 回答
1
您需要对列表的对象进行深度复制。使用Collections.copy(List1, List2);
或编写您的自定义代码。
于 2012-06-27T18:51:06.293 回答