List深拷贝
如图,深拷贝就是将A复制给B的同时,给B创建新的地址,再将地址A的内容传递到地址B。ListA与ListB内容一致,但是由于所指向的地址不同,所以改变相互不受影响。
使用序列化的方式拷贝:
/**
* 对集合进行深拷贝 注意需要对泛型类进行序列化(实现serializable)
*
* @param src 源list
* @param <T> list的对象泛型
* @return List<T>
* @throws IOException
* @throws ClassNotFoundException
*/
public static <T> List<T> deepCopy(List<T> src) {
try (ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
ObjectOutputStream outputStream = new ObjectOutputStream(byteOut);) {
outputStream.writeObject(src);
try (ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
ObjectInputStream inputStream = new ObjectInputStream(byteIn);) {
return (List<T>) inputStream.readObject();
}
} catch (Exception e) {
e.printStackTrace();
}
return Collections.emptyList();
}