马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在java中,我们如果想要对引用类型的聚集举行深拷贝。有一种方式,就是调用SerializationUtils
Apache Commons Lang (SerializationUtils)
Apache Commons Lang 提供了 SerializationUtils 类,可以利用 Java 的序列化机制来举行聚集及其元素的深拷贝。通过将聚集举行序列化和反序列化,达到深拷贝的结果。
- List<Person> originalList = new ArrayList<>();
- originalList.add(new Person("Alice"));
- originalList.add(new Person("Bob"));
- List<Person> copiedList = SerializationUtils.clone((ArrayList<Person>) originalList);
- System.out.println("Original List: " + originalList);
- System.out.println("Copied List: " + copiedList);
- // 修改拷贝中的对象,验证深拷贝
- copiedList.get(0).name = "Charlie";
- System.out.println("Original List: " + originalList);
- System.out.println("Copied List: " + copiedList);
复制代码 结果:
Original List: [Person{name='Alice'}, Person{name='Bob'}]
Copied List: [Person{name='Alice'}, Person{name='Bob'}]
Original List: [Person{name='Alice'}, Person{name='Bob'}]
Copied List: [Person{name='Charlie'}, Person{name='Bob'}]
注意: 这种方法要求聚集及其元素实现 Serializable 接口,因此实用于所有支持序列化的对象。
如果你盼望用其他方法对聚集举行深拷贝,可以选择以下几种方式:
除了SerializationUtils和以下的ObjectMapper,都是需要手动遍历添加引用类型对象,尽管重写了clone()方法
- Google Guava (Lists.newArrayList()):通过手动遍历和元素复制来实现深拷贝。
- Jackson (ObjectMapper):通过序列化和反序列化的方式举行深拷贝。
- Spring Framework (BeanUtils.copyProperties()):实用于 JavaBean 对象,可以在循环中手动深拷贝。
- Java 8 Cloneable 接口结合流式利用:如果对象实现了 Cloneable,可以利用 clone() 方法结合 Stream API 举行深拷贝。
这里只举一个例子:
- import java.util.ArrayList;
- import java.util.List;
- import java.util.stream.Collectors;
- public class DeepCopyExample {
- public static void main(String[] args) throws CloneNotSupportedException {
- List<Person> originalList = new ArrayList<>();
- originalList.add(new Person("Alice", 30));
- originalList.add(new Person("Bob", 25));
- // 使用 Java 8 Stream 和 Cloneable 实现深拷贝
- List<Person> deepCopy = originalList.stream()
- .map(person -> person.clone()) // 假设 Person 实现了 Cloneable
- .collect(Collectors.toList());
- // 输出检查
- System.out.println(originalList);
- System.out.println(deepCopy);
- }
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |