Java教程-Java比较器接口

Java比较器接口
Java比较器接口用于对用户定义类的对象进行排序。
该接口位于java.util包中,包含两个方法compare(Object obj1, Object obj2)和equals(Object element)。
它提供多种排序序列,即可以根据任何数据成员(例如rollno、name、age或其他任何字段)对元素进行排序。
Java比较器接口的方法
方法 | 描述 |
---|---|
public int compare(Object obj1, Object obj2) | 比较第一个对象和第二个对象。 |
public boolean equals(Object obj) | 用于将当前对象与指定对象进行比较。 |
public boolean equals(Object obj) | 用于将当前对象与指定对象进行比较。 |
Collections类
Collections类提供了对集合元素进行排序的静态方法。如果集合元素属于Set或Map,可以使用TreeSet或TreeMap进行排序。但是,无法对List的元素进行排序。Collections类还提供了对List类型元素进行排序的方法。
Collections类对List元素排序的方法
public void sort(List list, Comparator c):根据给定的Comparator对List的元素进行排序。
Java比较器示例(非泛型的旧风格)
我们来看一下如何根据年龄和姓名对List的元素进行排序。在这个例子中,我们创建了4个Java类:
1. Student.java
2. AgeComparator.java
3. NameComparator.java
4. Simple.java
Student.java
这个类包含了三个字段rollno、name和age以及一个带参数的构造函数。
class Student {
int rollno;
String name;
int age;
Student(int rollno, String name, int age) {
this.rollno = rollno;
this.name = name;
this.age = age;
}
}
AgeComparator.java
这个类基于年龄定义了比较逻辑。如果第一个对象的年龄大于第二个对象的年龄,我们返回一个正值。这个正值可以是1、2、10等任意正值。如果第一个对象的年龄小于第二个对象的年龄,我们返回一个负值,可以是任意负值;如果两个对象的年龄相等,我们返回0。
import java.util.*;
class AgeComparator implements Comparator {
public int compare(Object o1, Object o2) {
Student s1 = (Student) o1;
Student s2 = (Student) o2;
if (s1.age == s2.age)
return 0;
else if (s1.age > s2.age)
return 1;
else
return -1;
}
}