比较器
在java中经常涉及到对象数组的比较的情况,常见的有两种方法来处理:
- 继承
comparable
接口,并实现compareTo()
方法 - 定义一个单独的对象比较器,继承自
Comparator
接口,实现compare()
方法
Comparable
- Comparable 是排序接口
- 若一个类实现了Comparable接口,就意味着<u>该类支持排序</u>
有很多类(如Number包装类、String都实现了Comparable接口)
public class TestMain {
public static void main(String[] args) {
List<Student> list = new ArrayList<Student>(){
{
add(new Student(123,"张三",18));
add(new Student(456,"李四",19));
add(new Student(234,"王五",42));
add(new Student(567,"赵六",13));
add(new Student(678,"鬼脚七",66));
}
};
Collections.sort(list);
System.out.println(list);
}
}
class Student implements Comparable<Student> {
private int sno;
private String sname;
private int age;
public Student(int sno, String sname, int age) {
this.sno = sno;
this.sname = sname;
this.age = age;
}
//按照学号排序
@Override
public int compareTo(Student o) {
return o.sno - this.sno;
}
public int getSno() {
return sno;
}
public void setSno(int sno) {
this.sno = sno;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"sno=" + sno +
", sname='" + sname + '\'' +
", age=" + age +
"}\n";
}
}
Comparator
若需要控制某个类的次序,而该类本身不支持排序(即没有实现Comparable接口),那么,我们可以建立一个比较器(Comparator)来进行排序。
- Comparator 是比较器接口
- 比较的内容只能支持引用类型
使用 Comparator接口 自定义排序规则(默认,为升序)
- 如果认为左边数据 大于 右边数据 返回正整数
- 如果认为左边数据 小于 右边数据 返回负整数
- 如果认为左边数据 等于 右边数据 返回0
Integer[] arr = {5, 6, 38, 69, 1, -50};
Arrays.sort(arr, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) { // 降序
return -(o1-o2);
}
});
标签:sname,Java,int,sno,age,public,Student,比较 From: https://blog.51cto.com/u_15936519/6044743使用比较器比较浮点数时,需要使用
Double.compare()
方法进行比较,因为返回值是int,double的结果值可能被四舍五入,造成错误结果。