Comparable vs Comparator en Java

Shivam Arora 12 octubre 2023
  1. Java Comparable
  2. Comparator de Java
Comparable vs Comparator en Java

Este artículo discutirá Comparable y Comparator y encontrará la diferencia entre sus definiciones y sus casos de uso en Java.

Java Comparable

Un objeto Comparable en Java se utiliza para compararse con los otros objetos. Necesitamos implementar la interfaz java.lang.Comparable en la clase para usarla y compararla con las instancias. Esta interfaz tiene un método único llamado compareTo(object), que debe estar en línea con los otros métodos del objeto. Esta función también define el orden natural del objeto.

Usamos objetos Comparable en Java cuando hay una única comparación predeterminada o solo una implementación dentro de la misma clase. Esto significa que podemos comparar los dos objetos solo en base a datos individuales.

Usamos los operadores <, > y = para la comparación. Estos se utilizan para comparar el objeto actual con el objeto especificado.

  • Positivo, si el objeto presente > el objeto especificado.
  • Negativo, si el objeto actual < el objeto especificado.
  • Cero, si el objeto actual = el objeto especificado.

Por ejemplo,

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

Producción :

105 Emp3 21
101 Emp1 23
106 Emp2 27

Comparator de Java

El objeto Comparator se utiliza para comparar dos objetos diferentes en la misma clase o dos clases diferentes con la ayuda de la implementación de la interfaz java.lang.Comparator.

Usamos comparadores cuando hay más de una forma de comparar los dos objetos. Para utilizar la interfaz Comparator, la clase debe implementar el método compare(). Puede usarse para comparar dos objetos de una manera que podría no alinearse con el orden natural del objeto.

Por ejemplo,

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

Producción :

Sorted: 
111 Emp1 Delhi
121 Emp3 Jaipur
131 Emp2 Up

Artículo relacionado - Java Comparator