我有一个列表,我试图填写来自不同List
的数字。但是,当我更改我复制的列表中的数字时,它会在另一个列表中更改它们。有没有办法阻止这种情况发生?
答案 0 :(得分: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正在将他的列表传递给另一种方法,然后惊讶地发现他的列表已经添加/删除了数字。
答案 1 :(得分:3)
两个列表包含对相同数字对象的引用。更改第一个列表中的数字,然后更改第二个列表引用的同一个对象。
要保留两个列表并单独复制数字,您需要复制列表,例如与Collections.copy
。
答案 2 :(得分:1)
您需要在列表的对象上执行 deep copy 。
使用Collections.copy(List1, List2);
或编写自定义代码。