Java 中的 Comparable 與 Comparator

Shivam Arora 2023年1月30日 2021年10月2日
  1. Java 中的 Comparable 物件
  2. Java Comparator
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

相關文章 - Java Comparable

相關文章 - Java Comparator