Java の Comparable と Comparator

Shivam Arora 2023年10月12日
  1. Java Comparable
  2. Java Comparator
Java の Comparable と Comparator

この記事では、ComparableComparator について説明し、それらの定義と Java でのユースケースの違いを見つけます。

Java Comparable

Java の Comparable オブジェクトは、それ自体を他のオブジェクトと比較するために使用されます。java.lang.Comparable インターフェースをクラスに実装して使用し、インスタンスと比較する必要があります。このインターフェイスには、compareTo(object) と呼ばれる単一のメソッドがあります。これは、オブジェクトの他のメソッドと一致している必要があります。この関数は、オブジェクトの自然な順序も定義します。

デフォルトの比較が 1つある場合、または同じクラス内に実装が 1つしかない場合は、Java で Comparable オブジェクトを使用します。これは、単一のデータのみに基づいて 2つのオブジェクトを比較できることを意味します。

比較のために、<>、および = 演算子を使用します。これらは、現在のオブジェクトを指定されたオブジェクトと比較するために使用されます。

  • 現在のオブジェクト > が指定されたオブジェクトの場合、正。
  • 現在のオブジェクトが指定されたオブジェクト < の場合は負。
  • 現在のオブジェクトが指定されたオブジェクト = の場合はゼロ。

例えば、

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 インターフェイスの実装を利用して、同じクラスまたは 2つの異なるクラスの 2つの異なるオブジェクトを比較するために使用されます。

2つのオブジェクトを比較する方法が複数ある場合は、コンパレータを使用します。Comparator インターフェースを使用するには、クラスはメソッド compare() を実装する必要があります。これは、オブジェクトの自然な順序と一致しない可能性がある方法で 2つのオブジェクトを比較するために使用できます。

例えば、

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 Comparator