目录
1.创建JavaBean,切记一定要序列化
/**
* Desc: 测试Bean
* Created by Jack on 2020/5/15 15:08
**/
public class Person implements Serializable {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
2.编写深度拷贝方法
/**
* Desc: 深度拷贝
* Author: Jack
**/
private List<Person> deepCopy(List<Person> srcList) throws IOException, ClassNotFoundException {
//序列化
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(srcList);
//反序列化
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
List<Person> desList = (List<Person>) ois.readObject();
return desList;
}
3.编写测试方法
/**
* Desc: 测试
* Author: Jack
**/
private void testDeepCopy() {
List<Person> personList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Person person = new Person();
person.setName("Jackchen" + i);
person.setAge(18);
personList.add(person);
}
try {
List<Person> people = deepCopy(personList);
Log.d("Jack", "people=" + people);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
4.如何区别是否深度拷贝?
一般来说浅拷贝ArrayList时,ArrayList中的元素引用不会变,而对于深拷贝,ArrayList中的元素引用会变,数据说话:
同一次运行中,可以看出srcList与desList中元素的引用值是不一样的,所以是深拷贝。