一、对象比较
java中对象的比较有两种方法:
1、实现comparable中的compareTo方法:
例如下面这段代码:
将People按照年龄排序:
public int compareTo(People o) {
if(this.age>o.getAge()){
return 1;
}else if(this.age==o.getAge()){
return 0;
}else{
return -1;
}
}
public String toString(){
return "姓名"+name+"年龄"+age+"成绩"+score;
} //重写toString方法
写一个测试类:
public class Demo1{
public static void main(String[] args) {
People p1 = new People("zs", 20, 90);
People p2 = new People("ls", 21, 80);
People p3 = new People("zs", 10, 95);
People[] p=new People[]{p1,p2,p3};
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j].compareTo(arr[j + 1]) > 0) {
People temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
System.out.println(Arrays.toString(arr)); 调用重写后的toString方法,将对象按照排序后的结果输出
}
}
2.实现comparator接口中的compare方法:
例如:
将对象按照姓名排序:
public int compare(People o1, People o2) {
if(o1 instanceof People&&o2 instanceof People){
People p1=(People)o1;
People p2=(People)o2;
if(p1.getName().compareTo(p2.getName())==0){
return 0;
}else if(p1.getName().compareTo(p2.getName())>0){
return 1;
}else{
return -1;
}
}
}
}
二、对象克隆
实现cloneable接口的clone()方法 :
例如如下代码:
class People implements Cloneable {
private String name;
private int age;
private Student s = new Student();
protected Object clone(){
People p=(People) p.clone();
}
注意:
**People类中实例变量含有引用数据类型s, 单靠 People p=(People) p.clone()拷贝下来的仅仅只是地址,s的内存并没有拷下,需要在Student类中也实现cloneable中的clone()方法,**即:
*class People implements Cloneable {
private String name;
private int age;
private Student s = new Student();
protected Object clone(){
People p=(People) p.clone();*
***p.s=(Student)s.clone();***
}