/**
* 深度复制List A集合得到B集合,这样在修改集合A的时候 B集合中对象不会改变
* @param sourceList 被复制的集合
* @param <T> 集合中的对象(必须继承序列化接口)
* @return (复制出来的新集合,修改原集合的话不会受原集合的影响)
* @throws IOException
* @throws ClassNotFoundException
*/
public static <T> List<T> deepCopy(List<T> sourceList) throws IOException, ClassNotFoundException{
ByteArrayOutputStream bo= new ByteArrayOutputStream();
ObjectOutputStream oos= new ObjectOutputStream(bo);
oos.writeObject(sourceList);
ByteArrayInputStream bi= new ByteArrayInputStream(bo.toByteArray());
ObjectInputStream ois=new ObjectInputStream(bi);
@SuppressWarnings("unchecked")
List<T> dest = (List<T>)ois.readObject();
return dest;
}
效果如下图:其中list1为原集合,list2为浅复制,list3为深度复制