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