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