`
xinklabi
  • 浏览: 1564401 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
文章分类
社区版块
存档分类
最新评论

List深度复制

    博客分类:
  • Java
阅读更多

昨天弄了一个类似List<Map<String, List<String>>>这样的list的复制,结果无论使用new ArrayList<>(srcList),还是Collections.copy(dest, src),貌似都是浅复制,改变新的List就会影响原来的,今天发现下面的方法很简单,记录下来

 

 

 

  1. import java.io.ByteArrayInputStream;  
  2. import java.io.ByteArrayOutputStream;  
  3. import java.io.IOException;  
  4. import java.io.ObjectInputStream;  
  5. import java.io.ObjectOutputStream;  
  6. import java.io.Serializable;  
  7. import java.util.LinkedList;  
  8. import java.util.List;  
  9.   
  10. class Cat implements Serializable {  
  11.     private String cat;  
  12.     public Cat(String name) {  
  13.         cat = name;  
  14.     }  
  15.     public String getCat() {  
  16.         return cat;  
  17.     }  
  18.     public void setCat(String cat) {  
  19.         this.cat = cat;  
  20.     }  
  21. }  
  22.   
  23. public class CopyList {  
  24.     public static void main(String[] args) throws IOException,  
  25.             ClassNotFoundException {  
  26.         LinkedList<Cat> list = new LinkedList<Cat>();  
  27.         list.add(new Cat("a"));  
  28.         list.add(new Cat("b"));  
  29.         // 用原有集合创建新集合  
  30.         List<Cat> listCopy = (List<Cat>) deepcopy(list);  
  31.         // Collections.copy(listCopy, list);  
  32.         listCopy.add(new Cat("c"));  
  33.         for (Cat s : listCopy) {  
  34.             System.out.println("listCopy:" + s + "--cat:" + s.getCat());  
  35.         }  
  36.         for (Cat s : list) {  
  37.             System.out.println("list:" + s + "--cat:" + s.getCat());  
  38.         }  
  39.         System.out.println("listCopy:" + listCopy);  
  40.         System.out.println("list:" + list);  
  41.     }  
  42.   
  43.     public static List deepcopy(List src) throws IOException,  
  44.             ClassNotFoundException {  
  45.         ByteArrayOutputStream byteout = new ByteArrayOutputStream();  
  46.         ObjectOutputStream out = new ObjectOutputStream(byteout);  
  47.         out.writeObject(src);  
  48.         ByteArrayInputStream bytein = new ByteArrayInputStream(byteout  
  49.                 .toByteArray());  
  50.         ObjectInputStream in = new ObjectInputStream(bytein);  
  51.         List dest = (List) in.readObject();  
  52.         return dest;  
  53.   
  54.     }  
  55. }  
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics