Java의 Comparable 가능 대 비교기

Shivam Arora 2023년10월12일
  1. 자바 Comparable
  2. 자바 Comparator
Java의 Comparable 가능 대 비교기

이 기사에서는 비교 대상 및 비교 대상에 대해 논의하고 Java에서 해당 정의와 사용 사례 간의 차이점을 찾습니다.

자바 Comparable

Java의 Comparable 개체는 다른 개체와 자신을 비교하는 데 사용됩니다. 클래스에 java.lang.Comparable 인터페이스를 구현하여 이를 사용하고 인스턴스와 비교해야 합니다. 이 인터페이스에는 compareTo(object)라는 단일 메서드가 있으며, 이는 개체의 다른 메서드와 일치해야 합니다. 이 함수는 또한 객체의 자연스러운 순서를 정의합니다.

동일한 클래스 내에서 단일 기본 비교 또는 구현이 하나만 있는 경우 Java에서 Comparable 객체를 사용합니다. 이것은 우리가 단일 데이터를 기반으로 두 객체를 비교할 수 있음을 의미합니다.

비교를 위해 <, >= 연산자를 사용합니다. 이들은 현재 객체를 지정된 객체와 비교하는 데 사용됩니다.

  • 현재 객체 >가 지정된 객체인 경우 양수입니다.
  • 현재 개체가 지정된 개체 <인 경우 음수입니다.
  • 현재 개체가 지정된 개체 =인 경우 0입니다.

예를 들어,

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

자바 Comparator

Comparator 개체는 java.lang.Comparator 인터페이스 구현을 통해 동일한 클래스 또는 두 개의 다른 클래스에 있는 두 개의 다른 개체를 비교하는 데 사용됩니다.

두 객체를 비교하는 방법이 두 가지 이상인 경우 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 Comparator