## 深复制浅复制的官方概念我们就不用再多说了,百度一搜一大堆。
如果你的朋友比着你这辆车,买了一辆一模一样的车,这时候他再去加油,你的车就不会再有任何变化了,这就是深复制。
提示:以下是本篇文章正文内容,下面案例可供参考
一、深复制和浅复制的简单理解
打个比方,就好像你有一辆车,你朋友借你的车开,当他开到半路去加油,然后给你送了回来,这时候你的车也就发生了变化,这就是浅复制。如果你的朋友比着你这辆车,买了一辆一模一样的车,这时候他再去加油,你的车就不会再有任何变化了,这就是深复制。
二、直接上代码
1.引包
import java.io.*;
import java.util.ArrayList;
import java.util.List;
2.生成测试数据
List<Products> productList = new ArrayList<>();
Products products1 = new Products(1,"华为手机","2.15","土豪金",3500D);
Products products2 = new Products(2,"小米手机","3.11","玫瑰金",2500D);
Products products3 = new Products(3,"OPPO手机","1.22","象牙白",4500D);
Products products4 = new Products(4,"VIVO手机","1.24","哑光黑",5000D);
Products products5 = new Products(5,"诺基亚手机","1.55","高贵粉",4000D);
productList.add(products1);
productList.add(products2);
productList.add(products3);
productList.add(products4);
productList.add(products5);
List<Products> list = null;
try {
list = deepCopy(productList);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//这时候我们对旧集合进行改变
for (Products products : productList) {
products.setName("iPad");
}
3.核心方法
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);
List dest = (List)in.readObject();
return dest;
}
4.运行结果
可以看到,旧集合的name已经发生改变,但新集合并未改变。