0

我正在尝试使列表成为另一个列表的直接副本。这行得通吗?

list1 = list2

它会传输所有内容还是什么都不传输?

4

4 回答 4

1

您不是在制作副本,而是在添加参考。进行附加引用和将项目插入列表都是原子的。如果一个过程是不可拆分的,那么它就是原子的。要么完全完成,要么没有。

另请参阅以下线程,了解如何正确克隆列表。 Java Collections 副本列表 - 我不明白

谷歌搜索java clone method也会启发你。

于 2013-02-13T00:47:10.170 回答
0

不会。它只会list2引用存储在引用中的同一个列表list1。您可以使用copy constructor将引用从一个列表复制到另一个,但要小心,因为这不是深度复制 -> 新列表将包含存储在原始列表中的完全相同的对象。这是示例

List<String> list1 = new ArrayList<>();
list1.add("one");
list1.add("two");

List<String> list2 = list1;//now list2 will point to the same list as list1
list2.add("A");

//lets print content of list1
System.out.println(list1); // -> output: [one, two, A]

//--------------------------------------------------------------

//This way you can create separate list that contains same values as list1
List<String> list3 = new ArrayList(list1);
list3.add("B");

System.out.println(list1); // -> output: [one, two, A]
System.out.println(list3); // -> output: [one, two, A, B]
于 2013-02-13T00:52:35.360 回答
0

在大多数情况下,使用直接分配是没有用的。就好像您有两个不同名称的完全相同的变量,因为它们都指向相同的内存地址。

如果要将列表克隆到另一个列表中,则应使用copy constructor

例如

ArrayList<E> copyList = new ArrayList<E>(originalList);
于 2013-02-13T00:56:38.343 回答
0

它不会。在 java 中克隆对象并不是那么简单,请参阅链接How do I copy an object in Java?

于 2013-02-13T00:48:15.900 回答