首页 > 编程语言 > Java中的比较器

Java中的比较器

时间:2023-02-08 20:02:56浏览次数:41  
标签:sname Java int sno age public Student 比较

比较器

在java中经常涉及到对象数组的比较的情况,常见的有两种方法来处理:

  1. 继承​​comparable​​接口,并实现​​compareTo()​​方法
  2. 定义一个单独的对象比较器,继承自​​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);
}
});

使用比较器比较浮点数时,需要使用​​Double.compare()​​方法进行比较,因为返回值是int,double的结果值可能被四舍五入,造成错误结果。

标签:sname,Java,int,sno,age,public,Student,比较
From: https://blog.51cto.com/u_15936519/6044743

相关文章