arraylist复制
时间: 2025-04-22 22:31:52 浏览: 14
### Java中复制ArrayList的方法
#### 使用`Clone()`方法
在Java中,可以使用`clone()`方法来浅复制一个`ArrayList`对象。需要注意的是,这种方式只会创建一个新的列表实例,而不会对列表中的元素进行深拷贝。
```java
import java.util.ArrayList;
import java.util.Arrays;
public class CloneExample {
public static void main(String[] args) {
ArrayList<String> original = new ArrayList<>(Arrays.asList("apple", "banana"));
@SuppressWarnings("unchecked")
ArrayList<String> copy = (ArrayList<String>) original.clone();
System.out.println(copy);
}
}
```
这种方法适用于只读场景或者当列表内的对象也是不可变的时候[^1]。
#### 利用构造器进行复制
另一种常见的做法是通过传递现有列表给新的`ArrayList`构造函数来进行复制操作。这同样是一个浅复制过程。
```java
import java.util.ArrayList;
import java.util.List;
public class ConstructorCopyExample {
public static void main(String[] args) {
List<String> source = Arrays.asList("red", "green");
ArrayList<String> destination = new ArrayList<>(source);
System.out.println(destination);
}
}
```
此方式简单直观,在大多数情况下都能满足需求[^3]。
#### 深度复制:采用`CopyOnWriteArrayList`
对于需要深度复制的情况,特别是涉及到多线程环境下的并发访问时,推荐使用`CopyOnWriteArrayList`类。每当发生写入操作时它会自动创建整个数组的新副本来保证迭代期间的安全性。
```java
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
class DeepCopyExample {
public static void main(String[] args) {
List<Person> originalList = new ArrayList<>();
originalList.add(new Person("Alice"));
originalList.add(new Person("Bob"));
// 创建原列表的一个线程安全且独立的副本
List<Person> deepCopy = new CopyOnWriteArrayList<>(originalList);
// 修改原始列表不影响已有的deepCopy
originalList.get(0).setName("Charlie");
System.out.println(deepCopy.get(0).getName()); // 输出 Alice
}
private static class Person {
private String name;
public Person(String name) { this.name = name; }
public void setName(String newName) { this.name = newName; }
public String getName() { return this.name; }
}
}
```
这里展示了如何利用`CopyOnWriteArrayList`完成一次真正的深复制[^2]。
阅读全文
相关推荐


















