JAVA List 集合深複製與潛複製

今天做項目使用到了list深複製,自己嘗試了好幾種方式都是潛複製,最後在網上發現了一個帖子寫的這個方法很有效,現在給大家共享出來,希望對小夥伴有幫助。

代碼方法如下:

public static List deepCopy(List 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 dest = (List) in.readObject();

return dest;

}

其實,我開始使用的List深複製的做法在某些情況是可行的,這也是為什麼有些人說這其中的一些做法是可以實現深複製的原因。哪些情況下是可行(本質上可能還是不靠譜)的呢?比如List<string>這樣的情況。我上面使用的是List<person>,它和List<string>的區別就在於Person類和String類的區別,Person類提供了破壞數據的2個setter方法。因此,在淺複製的情況下,源數據被修改破壞之後,使用相同引用指向該數據的目標集合中的對應元素也就發生了相同的變化。/<string>/<person>/<string>

因此,在需求要求必須深複製的情況下,要是使用上面提到的方法,請確保List中的T類對象是不易被外部修改和破壞的。


分享到:


相關文章: