最近在工作的時候,有一個小需求,需要復制List的內容,然后會改變其中的數據,但是試了幾種復制的方法,都是將原有的數據和復制后的數據都改變了,都沒有達到我想要的效果。
其中涉及到了 “淺復制”和“深復制”的概念,這里不多說,可以參考這篇淺復制和深復制。我只記錄了這一個深復制的代碼,網上找的其它的深復制,好像不起作用。下面是代碼:
/**
* 深度拷貝
* @param src
* @param <>
* @return
* @throws IOException
* @throws ClassNotFoundException
*/
public static <T> List<T> deepCopy(List<T> src) throws IOException, ClassNotFoundException {
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(byteOut);
out.writeObject(src);
ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
ObjectInputStream in = new ObjectInputStream(byteIn);
@SuppressWarnings("unchecked")
List<T> dest = (List<T>) in.readObject();
return dest;
}
總結
工作中記錄一下,下次方便使用。
