Comparable vs Comparator en Java

Shivam Arora 12 octobre 2023
  1. Java Comparable
  2. Java Comparator
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

Article connexe - Java Comparator