Comparable vs Comparator en Java
Cet article discutera des Comparable
et des Comparator
et trouvera la différence entre leurs définitions et leurs cas d’utilisation en Java.
Java Comparable
Un objet Comparable
en Java est utilisé pour se comparer avec les autres objets. Il faut implémenter l’interface java.lang.Comparable
dans la classe pour l’utiliser et la comparer avec les instances. Cette interface a une seule méthode appelée compareTo(object)
, qui doit être en ligne avec les autres méthodes de l’objet. Cette fonction définit également l’ordre naturel de l’objet.
Nous utilisons des objets Comparable
en Java lorsqu’il existe une seule comparaison par défaut ou une seule implémentation au sein de la même classe. Cela signifie que nous pouvons comparer les deux objets uniquement sur la base de données uniques.
Nous utilisons les opérateurs <
, >
et =
pour la comparaison. Ceux-ci sont utilisés pour comparer l’objet actuel avec l’objet spécifié.
- Positif, si l’objet présent
>
l’objet spécifié. - Négatif, si l’objet présent
<
l’objet spécifié. - Zéro, si l’objet courant
=
l’objet spécifié.
Par exemple,
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);
}
}
}
Production:
105 Emp3 21
101 Emp1 23
106 Emp2 27
Java Comparator
L’objet Comparator
permet de comparer deux objets différents soit dans la même classe, soit dans deux classes différentes à l’aide de l’implémentation de l’interface java.lang.Comparator
.
Nous utilisons des Comparator
lorsqu’il existe plusieurs façons de comparer les deux objets. Pour utiliser l’interface Comparator, la classe doit implémenter la méthode compare()
. Il peut être utilisé pour comparer deux objets d’une manière qui pourrait ne pas s’aligner sur l’ordre naturel de l’objet.
Par exemple,
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));
}
}
Production:
Sorted:
111 Emp1 Delhi
121 Emp3 Jaipur
131 Emp2 Up