Java中比较两个对象的两种方式,推荐使用comparator,在没有comparator的基础上只能把当前对象强转为comparable来使用compareTo方法。
import java.util.Comparator;
/**
* @program: comparatorAndComparable
* @description:
* @author: fwb
* @create: 2019-06-26 17:43
**/
class Person{
private int age;
private String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
}
//基于姓名的比较器
class PersonCompare implements Comparator<Person> {
@Override
public int compare(Person o1,Person o2) {
return o1.getName().compareTo(o2.getName());
}
}
//基于年龄的比较器
class PersonAgeCompare implements Comparator<Person> {
@Override
public int compare(Person o1,Person o2) {
return o1.getAge()-(o2.getAge());
}
}
public class Ex {
public static void main(String[] args) {
Person per = new Person(20,"张三");
Person per1 = new Person(21,"王麻子");
PersonCompare personCpmpare = new PersonCompare();
PersonAgeCompare personAgeCpmpare = new PersonAgeCompare();
System.out.println(personCpmpare.compare(per1,per));
System.out.println(personAgeCpmpare.compare(per1,per));
}
}
/*
这种写法,如果规则变了变成谁的name大谁就大,还需要改代码。
*/
class Person implements Comparable<Person>{
private int age;
private String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int compareTo(Person o) {
return this.age - o.age;
}
}
public class Ex {
public static void main(String[] args) {
Person per = new Person(20,"张三");
Person per1 = new Person(21,"王麻子");
System.out.println(per.compareTo(per1));
}
}