Java 中的 Comparable 与 Comparator

  1. Java 中的 Comparable 对象
  2. Java 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

相关文章 - Java Comparable

  • 重写 Java 中的 CompareTo 方法
  • 相关文章 - Java Comparator

  • 重写 Java 中的 CompareTo 方法
  • Java 中的优先级队列比较器
  • Java 中的匿名比较器