Java 比较器comparable与comparator的使用
工具类与算法类(collections和Arrays)使用比较多,在它们里面就包含了comparable与comparator这两种比较器。
一、比较器的分类
1、comparable内部比较器:元素自身以来就有规定好的默认比较规则;
2、comparator外部比较器:根据具体需要而自定义的第三方比较规则;(当有外部比较器时元素的自带内部比较器就会被取代)
返回值:negative, zero,positive
注:依赖于根据比较规则两个元素位置的差。
二、使用内部比较器与外部比较器(排序,只能操作List)
内部比较器:必须实体类实现这个接口Comparable
public class Student implements Comparable{
private int number = 0; //学号
private String name = ""; //姓名
private String gender = ""; //性别
public Student() {
}
public Student(int number, String name, String gender) {
this.number = number;
this.name = name;
this.gender = gender;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Student{" +
"number=" + number +
", name='" + name + '\'' +
", gender='" + gender + '\'' +
'}';
}
@Override
public int compareTo(Object o) {
Student stu=(Student)o;
// return stu.getNumber()-this.getNumber();
return this.getNumber()-stu.getNumber();
}
}
调用直接
外部直接实现这个接口Comparator
private static void getComparator(ArrayList<Student> list) {
// 排序 :说明必须要实现这个接口Comparable
//可以使用参数比较器来实现
Collections.sort(list, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
//asc
// return o1.getNumber()-o2.getNumber();
//desc
return o2.getNumber()-o1.getNumber();
}
});
}
效果:
还没有评论,来说两句吧...