1.背景:
含有实体类的List,通过addAll(list2),new List<pojo>(list2),=赋值,循环赋值等方法均不能实现深拷贝,具体可查看参考文章。
2.实现
采用序列化方法实现,其中pojo类必须实现序列化,即public class pojo implements Serializable{}(tips:之前本人没有注意到pojo类没有实现序列化,调用该deepCopyList方法时一直报错)
然后可以写一个公共方法:
/**
* pojo列表的深复制(pojo需要实现序列化即implements Serializable)
*/
//以下的注解可要可不要
@SuppressWarnings("unchecked")
public static <T> List<T> deepCopyList(List<T> src)
{
List<T> dest = null;
try
{
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(byteOut);
out.writeObject(src);
ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
ObjectInputStream in = new ObjectInputStream(byteIn);
dest = (List<T>) in.readObject();
}
catch (IOException e)
{
e.printStackTrace();
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
return dest;
}
3.参考文章:Java提高篇(十四):Java List、Map的深度克隆_azhegps的博客-CSDN博客_java 克隆list