Comparable vs. Comparator in Java

Shivam Arora 12 Oktober 2023
  1. Java Comparable
  2. Java Comparator
Comparable vs. Comparator in Java

In diesem Artikel werden Comparable und Comparator diskutiert und der Unterschied zwischen ihren Definitionen und ihren Anwendungsfällen in Java ermittelt.

Java Comparable

Ein Comparable-Objekt in Java wird verwendet, um sich mit den anderen Objekten zu vergleichen. Wir müssen das Interface java.lang.Comparable in der Klasse implementieren, um es zu verwenden und mit den Instanzen zu vergleichen. Diese Schnittstelle hat eine einzige Methode namens compareTo(object), die mit den anderen Methoden des Objekts übereinstimmen sollte. Diese Funktion definiert auch die natürliche Ordnung des Objekts.

Comparable-Objekte verwenden wir in Java, wenn es einen einzigen Standardvergleich oder nur eine Implementierung innerhalb derselben Klasse gibt. Das bedeutet, dass wir die beiden Objekte nur anhand einzelner Daten vergleichen können.

Wir verwenden die Operatoren <, > und = zum Vergleich. Diese werden verwendet, um das aktuelle Objekt mit dem angegebenen Objekt zu vergleichen.

  • Positiv, wenn das aktuelle Objekt > das angegebene Objekt ist.
  • Negativ, wenn das aktuelle Objekt < das angegebene Objekt ist.
  • Null, wenn das aktuelle Objekt = das angegebene Objekt ist.

Zum Beispiel,

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);
    }
  }
}

Ausgabe:

105 Emp3 21
101 Emp1 23
106 Emp2 27

Java Comparator

Das Objekt Comparator dient dem Vergleich zweier verschiedener Objekte entweder derselben Klasse oder zweier verschiedener Klassen mit Hilfe der Implementierung der Schnittstelle java.lang.Comparator.

Comparator verwenden wir, wenn es mehr als eine Möglichkeit gibt, die beiden Objekte zu vergleichen. Um die Comparator-Schnittstelle zu verwenden, muss die Klasse die Methode compare() implementieren. Es kann verwendet werden, um zwei Objekte auf eine Weise zu vergleichen, die möglicherweise nicht mit der natürlichen Reihenfolge des Objekts übereinstimmt.

Zum Beispiel,

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));
  }
}

Ausgabe:

Sorted: 
111 Emp1 Delhi
121 Emp3 Jaipur
131 Emp2 Up

Verwandter Artikel - Java Comparator