java深拷贝的几种方法
  dZorqA5VCQO6 2023年12月22日 58 0


  1. 使用序列化和反序列化:将集合对象序列化为字节流,然后再反序列化成一个新的对象。这种方式需要确保集合中的所有元素都是可序列化的。

import java.io.*;

public static source) { try { ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(byteOut); out.writeObject(source);

ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
    ObjectInputStream in = new ObjectInputStream(byteIn);
    @SuppressWarnings("unchecked")
    List<T> copy = (List<T>) in.readObject();

    return copy;
} catch (IOException | ClassNotFoundException e) {
    e.printStackTrace();
    return null;
}

}

  1. 使用 clone 方法:如果集合中的元素类实现了 Cloneable 接口,并且正确地重写了 clone() 方法,那么可以通过调用 clone() 方法来实现深拷贝。

import java.util.ArrayList; import java.util.List;

// 实现 Cloneable 接口

class MyClass implements Cloneable { // ...

@Override

protected Object clone() throws CloneNotSupportedException {
    return super.clone();
}

}

// 深拷贝方法

public static copy = new ArrayList<>(); for (T item : source) { try { @SuppressWarnings("unchecked") T clonedItem = (T) item.clone(); copy.add(clonedItem); } catch (CloneNotSupportedException e) { e.printStackTrace(); } } return copy; }

  1. 使用第三方库:如果你不想自己实现深拷贝的逻辑,可以使用一些第三方库,如 Apache Commons Lang 的 SerializationUtils 类或 Google Guava 的 Lists 类提供的方法来实现深拷贝。

 

import org.apache.commons.lang3.SerializationUtils;

import com.google.common.collect.Lists;


// 深拷贝方法(使用 Apache Commons Lang)

public static <T extends Serializable> List<T> deepCopy(List<T> source) {

   return SerializationUtils.clone(source);

}


// 深拷贝方法(使用 Google Guava)

public static <T extends Serializable> List<T> deepCopy(List<T> source) {

   return Lists.newArrayList(source);

}


在进行深拷贝时,集合中的元素类必须是可序列化的或实现了 Cloneable 接口,并正确地重写了 clone() 方法。另外,深拷贝可能会导致性能损耗,因此在处理大型集合时要谨慎使用。朋友们觉得好用记得点赞

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: rabbit mq学习 下一篇: SpringBoot自动配置解析
  1. 分享:
最后一次编辑于 2023年12月22日 0

暂无评论

推荐阅读
dZorqA5VCQO6
作者其他文章 更多