📅  最后修改于: 2023-12-03 15:37:50.611000             🧑  作者: Mango
在 Java 中复制 ArrayList 通常有两种方法,可以使用 clone()
方法或使用 addAll()
方法。
clone()
方法可以用来创建一个 ArrayList 的浅复制。浅复制意味着它将复制引用,而不是实例本身。这意味着如果原始 ArrayList 更改,则复制 ArrayList 也会更改,因为它们引用相同的对象。
下面是一个使用 clone()
方法的示例程序:
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> originalList = new ArrayList<>();
originalList.add(1);
originalList.add(2);
originalList.add(3);
List<Integer> copiedList = (List<Integer>) ((ArrayList<Integer>) originalList).clone();
System.out.println("Original list: " + originalList);
System.out.println("Copied list: " + copiedList);
}
}
输出结果如下:
Original list: [1, 2, 3]
Copied list: [1, 2, 3]
注意:将 List
转换为 ArrayList
并强制转型是必需的,否则将无法使用 clone()
方法。
addAll()
方法可以用来创建一个 ArrayList 的深复制。深复制意味着它将复制实例,而不是只复制引用。
下面是一个使用 addAll()
方法的示例程序:
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> originalList = new ArrayList<>();
originalList.add(1);
originalList.add(2);
originalList.add(3);
List<Integer> copiedList = new ArrayList<>(originalList);
System.out.println("Original list: " + originalList);
System.out.println("Copied list: " + copiedList);
}
}
输出结果如下:
Original list: [1, 2, 3]
Copied list: [1, 2, 3]
注意:使用 addAll()
方法必须先创建一个新的 ArrayList,并将原始 ArrayList 传递给它的构造函数。
上述两种方法都只适用于可序列化的对象,因为它们需要创建相同的对象类型。
另外,请注意,这些方法都只是复制了 ArrayList 本身,但没有复制 ArrayList 中存储的对象。如果你需要复制对象本身,你需要在复制 ArrayList 后对每个对象执行深复制。