Java Comparator接口用于根据按卷号进行比较的条件比较相同类的两个对象。或名称等
``我们可以使用sort函数对ArrayList的元素进行排序,但是当要基于数据成员对元素进行排序时,sort函数不是一个好选择,因为您将不得不针对不同的条件重写排序代码。
使用Comparator接口,我们可以轻松地对用户定义类的对象进行排序。java.util包中存在Comparator接口Comparator类有两种方法:
我们可以使用sort函数对ArrayList的元素进行排序,但是当要基于数据成员对元素进行排序时,sort函数并不是一个好选择,因为您将不得不针对不同的条件重写排序代码。
使用Comparator接口,我们可以轻松地对用户定义类的对象进行排序。java.util包中存在Comparator接口Comparator类有两种方法:
比较(对象1,对象2)将第一个对象与第二个对象进行比较
等于(对象元素)
在这里,我们将使用Collection类,该类提供sort()
了使用给定比较器对列表元素进行排序的方法。
语法:
public void sort(List list , Comparator C)
通过这个简短的示例,让我们看看比较器是如何工作的。
这里有五个类:
Employee类(定义类的数据成员)
实现Comparator接口的IdComparator类(使用ID数据成员比较对象)
实现Comparator接口的SalaryComparator类(使用Salary数据成员比较对象)
实现Comparator接口的NameComparator类(使用Name数据成员比较对象)
ExComparator主类
代码
package logicProgramming; import java.util.ArrayList; //导入数组列表 import java.util.Collections; //导入集合 import java.util.Comparator; //导入比较器 //代表员工的类 //此类定义员工的所有数据成员 class Employee { public int id; public String name; public long salary; //构造函数 public Employee(int id,String name,long salary) { this.id=id; this.name=name; this.salary=salary; } } //此类是一个比较器类,它将 //根据员工ID比较两个员工对象 class IdComparator implements Comparator<Employee> { public int compare(Employee E1,Employee E2) { //如果id相同,即对象相等,则将返回0- if(E1.id==E2.id) {return 0;} //如果第一个对象的ID大于第二个对象的ID,则它将返回1- else if(E1.id>E2.id) {return 1;} //如果第一个对象的ID小于第二个对象的ID,则它将返回-1- else {return -1;} } } //此类用于按薪金比较员工对象 class SalaryComparator implements Comparator<Employee> { public int compare(Employee E1,Employee E2) { //如果两个对象的薪水相同,则将返回0- if(E1.salary==E2.salary) {return 0;} //如果第一个对象的薪水大于第二个对象的薪水,它将返回1- else if(E1.salary>E2.salary) {return 1;} //如果第一个对象的薪水小于第二个对象的薪水,它将返回-1- else {return -1;} } } //此类是一个比较器类,它将 //根据名称比较两个员工对象 //并将按字母顺序对员工进行排序 class NameComparator implements Comparator<Employee> { public int compare(Employee E1,Employee E2) { return(E1.name.compareTo(E2.name)); } } //主类 public class ExComparator { public static void main(String arg[]) { ArrayList<Employee> list=new ArrayList<Employee>();//保存员工对象的数组列表 Employee E1=new Employee(100,"Muskan Singh",30885); Employee E2=new Employee(200,"Amitabh Singh",29000); Employee E3=new Employee(300,"O.P. Rai",29500); list.add(E1); //添加员工对象 list.add(E2); list.add(E3); System.out.println("\n\n\nSorting By Name............"); Collections.sort(list, new NameComparator()); //按名称对列表的对象进行排序 //遍历列表以打印对象 for(Employee E:list) { System.out.println("Name :"+E.name+"\nId :"+E.id+"\nSalary :"+E.salary);//将已排序的对象打印到屏幕上 System.out.println(); } System.out.println("\n\n\nSorting By Salary............"); Collections.sort(list, new SalaryComparator()); //按薪水排序列表中的对象。 for(Employee E:list) { System.out.println("\nSalary :"+E.salary+"\nName :"+E.name+"\nId :"+E.id); System.out.println(); } System.out.println("\n\n\nSorting By Id............"); Collections.sort(list, new IdComparator());//按ID对列表中的对象进行排序。 //遍历列表以打印对象 for(Employee E:list) { System.out.println("Id :"+E.id+"\nName :"+E.name+"\nSalary :"+E.salary); System.out.println(); }//将已排序的对象打印到屏幕上 } }
外出
Sorting By Name............ Name :Amitabh Singh Id :200 Salary :29000 Name :Muskan Singh Id :100 Salary :30885 Name :O.P. Rai Id :300 Salary :29500 Sorting By Salary............ Salary :29000 Name :Amitabh Singh Id :200 Salary :29500 Name :O.P. Rai Id :300 Salary :30885 Name :Muskan Singh Id :100 Sorting By Id............ Id :100 Name :Muskan Singh Salary :30885 Id :200 Name :Amitabh Singh Salary :29000 Id :300 Name :O.P. Rai Salary :29500