对象的比较,排序,重写equals(),compareTo(),hashCode()方法

时间:2021-02-01 16:04:52
import java.util.ArrayList;
import java.util.Collections;
public class Person implements Comparable<Person>{
private String name;
private int age;
private String sex;

public Person(String name ,int age, String sex){
this.name = name;
this.age = age;
this.sex = sex;
}

//重写equals方法
public boolean equals(Object other) {
boolean flag = false;
if(other == null) {
return flag;
}
if(this == other) {
return !flag;
}
if (other instanceof Person) {
Person p = (Person)other;
if(!this.name.equals(p.name)) {
return flag;
}

if(this.age != p.age) {
return flag;
}
if(!this.sex.equals(p.sex)) {
return flag;
}
flag = true;
}
return flag;
}
//重写hasCode
public int hashCode() {
return this.name.hashCode();
}

//实现compareTo接口,首先按age排序,再按name排序
public int compareTo(Person p) {
if(this.age > p.age){
return 1;
}else if(this.age < p.age) {
return -1;
}else{
return this.name.compareTo(p.name);
}
}

public static void main(String[] args) {
Person p1 = new Person("TOM",10,"male");
Person p2 = new Person("Mary",12,"female");
Person p3 = new Person("TOM",10,"male");
Person p4 = new Person("Ryan",9,"male");
Person p5 = new Person("Aill",9,"male");
Person p6 = new Person("Cindy",12,"female");

ArrayList<Person> list = new ArrayList<Person>();
list.add(p2);
list.add(p3);
list.add(p4);
list.add(p5);
list.add(p6);

System.out.println(p1.equals(p3));//true;
System.out.println(p1.equals(p2));//false;

Collections.sort(list);
for (Person p : list) {
System.out.println(p.name + " " + p.age + " " + p.sex);
}

/*打印结果
Aill 9 male
Ryan 9 male
TOM 10 male
Cindy 12 female
Mary 12 female
*/
}

}