Java Comparator接口
精华
小牛编辑
202浏览
2023-03-14
1 什么是Java Comparator接口
Java Comparator接口用于对用户定义的类的对象进行排序。
该接口在java.util包下,包含2个方法compare(Object obj1,Object obj2)和equals(Object element)。
它提供了多种排序顺序,意味着,您可以根据任何数据成员(例如,编号,名称,年龄或其他任何属性)对元素进行排序。
2 Java Comparator接口的方法
方法 | 描述 |
---|---|
public int compare(Object obj1, Object obj2) | 将第一个对象与第二个对象进行比较。 |
public boolean equals(Object obj) | 用于将当前对象与指定对象进行比较。 |
3 Java Comparator接口的例子
让我们来看一个根据年龄和姓名对List元素进行排序的示例。在此示例中,我们创建了4个Java类:
- Student.java
- AgeComparator.java
- NameComparator.java
- Demo.java
3.1 Student.java
package cn.xnip;
/**
* 小牛知识库网: https://www.xnip.cn
*/
/**
* Java Comparator 接口的例子
*/
class Student{
int rollno;
String name;
int age;
Student(int rollno,String name,int age){
this.rollno=rollno;
this.name=name;
this.age=age;
}
}
3.2 AgeComparator.java
package cn.xnip;
import java.util.Comparator;
/**
* 小牛知识库网: https://www.xnip.cn
*/
/**
* Java Comparator 接口的例子
*/
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;
}
}
3.3 NameComparator.java
package cn.xnip;
import java.util.Comparator;
/**
* 小牛知识库网: https://www.xnip.cn
*/
/**
* Java Comparator 接口的例子
*/
class NameComparator implements Comparator {
public int compare(Object o1,Object o2){
Student s1=(Student)o1;
Student s2=(Student)o2;
return s1.name.compareTo(s2.name);
}
}
3.4 Demo.java
package cn.xnip;
/**
* 小牛知识库网: https://www.xnip.cn
*/
import java.util.*;
/**
* Java Comparator 接口的例子
*/
public class Demo{
public static void main(String args[]){
ArrayList al=new ArrayList();
al.add(new Student(101,"Rose",23));
al.add(new Student(106,"Jack",27));
al.add(new Student(105,"Mark",21));
System.out.println("Sorting by Name");
Collections.sort(al,new NameComparator());
Iterator itr=al.iterator();
while(itr.hasNext()){
Student st=(Student)itr.next();
System.out.println(st.rollno+" "+st.name+" "+st.age);
}
System.out.println("Sorting by age");
Collections.sort(al,new AgeComparator());
Iterator itr2=al.iterator();
while(itr2.hasNext()){
Student st=(Student)itr2.next();
System.out.println(st.rollno+" "+st.name+" "+st.age);
}
}
}
3.5 输出结果为
运行Demo类的main方法
Sorting by Name
106 Jack 27
105 Mark 21
101 Rose 23
Sorting by age
105 Mark 21
101 Rose 23
106 Jack 27