Java 中的 Comparable 与 Comparator

本文将讨论 ComparableComparator,并找出它们在 Java 中的定义和用例之间的差异。

Java 中的 Comparable 对象

Java 中的 Comparable 对象用于将自身与其他对象进行比较。我们需要在类中实现 java.lang.Comparable 接口以使用它并将其与实例进行比较。这个接口有一个名为 compareTo(object) 的方法,它应该与对象的其他方法一致。该函数还定义了对象的自然顺序。

当在同一类中只有一个默认比较或只有一个实现时,我们在 Java 中使用 Comparable 对象。这意味着我们只能根据单个数据比较两个对象。

我们使用 <>= 运算符进行比较。这些用于将当前对象与指定对象进行比较。

  • 正数,如果当前对象 > 指定的对象。
  • 负数,如果当前对象 < 指定的对象。
  • 零,如果当前对象 = 指定的对象。

例如,

import java.util.*;
class Employee implements Comparable<Employee>{
    int empid;
    String name;
    int age;
    Employee(int empid,String name,int age){
        this.empid=empid;
        this.name=name;
        this.age=age;
    }
    public int compareTo(Employee st){
    if(age==st.age)
    return 0;
    else if(age>st.age)
    return 1;
    else
    return -1;
    }
}
public class Main{
    public static void main(String args[]){
        ArrayList<Employee> al=new ArrayList<Employee>();
        al.add(new Employee(101,"Emp1",23));
        al.add(new Employee(106,"Emp2",27));
        al.add(new Employee(105,"Emp3",21));
        Collections.sort(al);
        for(Employee st:al){
            System.out.println(st.empid+" "+st.name+" "+st.age);
        }
    }
}

输出:

105 Emp3 21
101 Emp1 23
106 Emp2 27

Java Comparator

Comparator 对象用于在 java.lang.Comparator 接口的实现的帮助下比较同一类或两个不同类中的两个不同对象。

当有不止一种比较两个对象的方法时,我们使用比较器。要使用 Comparator 接口,该类必须实现方法 compare()。它可用于以可能与对象的自然顺序不一致的方式比较两个对象。

例如,

import java.io.*;
import java.lang.*;
import java.util.*;
class Employee {
    int eid;
    String name, address;
    public Employee(int eid, String name, String address)
    {
        this.eid = eid;
        this.name = name;
        this.address = address;
    }
    public String toString()
    {
        return this.eid + " " + this.name + " "
            + this.address;
    }
}
class Sortbyeid implements Comparator<Employee> {
    // Used for sorting in ascending order of
    // roll number
    public int compare(Employee a, Employee b)
    {
        return a.eid - b.eid;
    }
}
class Main {
    public static void main(String[] args)
    {
        ArrayList<Employee> a = new ArrayList<Employee>();
        a.add(new Employee(111, "Emp1", "Delhi"));
        a.add(new Employee(131, "Emp2", "Up"));
        a.add(new Employee(121, "Emp3", "Jaipur"));
        Collections.sort(a, new Sortbyeid());
        System.out.println("Sorted: ");
        for (int i = 0; i < a.size(); i++)
            System.out.println(a.get(i));
    }
}

输出:

Sorted:
111 Emp1 Delhi
121 Emp3 Jaipur
131 Emp2 Up