Java 中的 Comparable 與 Comparator
    
    
            Shivam Arora
    2023年10月12日
    
    Java
    Java Comparable
    Java Comparator
    
 
本文將討論 Comparable 和 Comparator,並找出它們在 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
        Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe