比较器
内部比较器Comparable
/**
* 两个对象对比大小的方法
* @param obj 另一个对象
* @return 当前对象如果比传入的对象大,则返回整数,如果小,返回负数,如果相同,返回0
*/
int compareTo(Object obj);
注意 compareTo 不是自己定义的compareTo方法 而是String中compareTo
【1】引用数据类型的数据也是可以比较大小
【2】如果想要比较大小,对象需要实现Comparable
【3】重写里面的compareTo方法,比较两个值做一个减法
【4】我们根据返回的值是正数、负数、还是0,就可以知道那个对象的大小了
public class Student implements Comparable<Student>{
private String name;
private int age;
public Student(){}
public Student(String name, int age) {
this.name = name;
this.age = 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;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public int compareTo(Student o) {
int a= this.age;//比较时候前面对象中age属性
int b= o.age;//传递进来的对象中age属性
String aa=this.name;
String bb=o.name;
//注意 compareTo 不是自己定义的compareTo方法 而是String中compareTo
return aa.compareTo(bb);
}
}
public class TestA {
public static void main(String[] args) {
/* String st1="bac8weuiwuwiew";
String st2="bac";
int n= st2.compareTo(st1);*/
Student stu1=new Student("zs",78);
Student stu2=new Student("zs",19);
int i = stu1.compareTo(stu2);
System.out.println(i);
}
}
外部比较器Comparator
public class People {
private String name;
private int age;
public People(){}
public People(String name, int age) {
this.name = name;
this.age = 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;
}
@Override
public String toString() {
return "People{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class BJ implements Comparator<People> {
@Override
public int compare(People o1, People o2) {
int age1 = o1.getAge();
int age2 = o2.getAge();
return age1-age2;
}
}
总结:
1.如果实现类没有实现Comparable接口,又想对两个类进行比较(或者实现类实现了Comparator接口,但是对compareTo方法内的比较算法不满意),那么可以实现Comparator接口,自定义一个比较器,写比较算法
2.实现Comparable接口的方式比实现Comparator接口的耦合性要强一些,如果要修改比价算法,要修改Comparable接口的实现类,而实现实现Comparator的类是在外部进行比较的,不需要对实现类有任何修 改。从这个角度说,其实有些不太好,尤其在我们将实现类的.class文件打成一个.jar文件提供给开发者使用的时候。实际上实现Comparator 接口的方式后面会写到就是一种典型的策略模式。