我正在尝试使列表成为另一个列表的直接副本。这行得通吗?
list1 = list2
它会传输所有内容还是什么都不传输?
您不是在制作副本,而是在添加参考。进行附加引用和将项目插入列表都是原子的。如果一个过程是不可拆分的,那么它就是原子的。要么完全完成,要么没有。
另请参阅以下线程,了解如何正确克隆列表。 Java Collections 副本列表 - 我不明白
谷歌搜索java clone method
也会启发你。
不会。它只会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]
在大多数情况下,使用直接分配是没有用的。就好像您有两个不同名称的完全相同的变量,因为它们都指向相同的内存地址。
如果要将列表克隆到另一个列表中,则应使用copy constructor
例如
ArrayList<E> copyList = new ArrayList<E>(originalList);
它不会。在 java 中克隆对象并不是那么简单,请参阅链接How do I copy an object in Java?