【JavaSE】比较器、深拷贝浅拷贝
在Java中,比较器通常是通过实现Comparator
接口来完成的,而深浅拷贝则是对象复制的两种方式。
- 比较器实现
import java.util.Comparator;
public class PersonComparator implements Comparator<Person> {
@Override
public int compare(Person o1, Person o2) {
return Integer.compare(o1.getAge(), o2.getAge());
}
}
// 使用
PersonComparator comparator = new PersonComparator();
int result = comparator.compare(person1, person2);
- 浅拷贝
浅拷贝通常通过对象的clone()
方法实现,前提是该对象类需要实现Cloneable
接口并覆盖clone()
方法。
public class Person implements Cloneable {
private String name;
private int age;
// 省略构造器和getter/setter方法
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
// 使用
try {
Person personCopy = (Person) person.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
- 深拷贝
深拷贝通常需要自己手动实现,递归地复制对象中的所有引用类型的成员变量。
public class Person implements Cloneable {
private String name;
private int age;
private Address address;
// 省略构造器和getter/setter方法
@Override
protected Object clone() throws CloneNotSupportedException {
Person cloned = (Person) super.clone();
cloned.setAddress((Address) address.clone());
return cloned;
}
}
public class Address implements Cloneable {
private String street;
private String city;
// 省略构造器和getter/setter方法
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
// 使用
try {
Person personDeepCopy = (Person) person.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
注意:深拷贝需要处理可能出现的CloneNotSupportedException
,并确保所有参与拷贝的类都实现了Cloneable
接口并覆盖了clone()
方法。
评论已关闭