1

我有一个列表,我试图用不同的数字填充List。但是,当我更改从中复制的列表中的数字时,它会在另一个列表中更改它们。有没有办法阻止这种情况发生?

4

3 回答 3

4

您需要将列表中的值复制到新列表中:

List<Integer> list1 = Arrays.asList(1, 2, 3);
List<Integer> list2 = new ArrayList<String>(list1); // copy the values of list1 into list2

这会将所有值复制list1list2. 然后您可以在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 回答