Java Comparator 比较器

Comparator 接口

Java Comparator接口用于根据按卷号进行比较的条件比较相同类的两个对象。或名称等

``我们可以使用sort函数对ArrayList的元素进行排序,但是当要基于数据成员对元素进行排序时,sort函数不是一个好选择,因为您将不得不针对不同的条件重写排序代码。

使用Comparator接口,我们可以轻松地对用户定义类的对象进行排序。java.util包中存在Comparator接口Comparator类有两种方法:

我们可以使用sort函数对ArrayList的元素进行排序,但是当要基于数据成员对元素进行排序时,sort函数并不是一个好选择,因为您将不得不针对不同的条件重写排序代码。

使用Comparator接口,我们可以轻松地对用户定义类的对象进行排序。java.util包中存在Comparator接口Comparator类有两种方法:

  1. 比较(对象1,对象2)将第一个对象与第二个对象进行比较

  2. 等于(对象元素)

在这里,我们将使用Collection类,该类提供sort()了使用给定比较器对列表元素进行排序的方法。

语法:

public void sort(List list , Comparator C)

通过这个简短的示例,让我们看看比较器是如何工作的。

这里有五个类:

  1. Employee类(定义类的数据成员)

  2. 实现Comparator接口的IdComparator类(使用ID数据成员比较对象)

  3. 实现Comparator接口的SalaryComparator类(使用Salary数据成员比较对象)

  4. 实现Comparator接口的NameComparator类(使用Name数据成员比较对象)

  5. 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