Comparable vs Comparator em Java

Shivam Arora 12 outubro 2023
  1. Java Comparable
  2. Java Comparator
Comparable vs Comparator em Java

Este artigo discutirá comparáveis ​​e comparadores e encontrará a diferença entre suas definições e seus casos de uso em Java.

Java Comparable

Um objeto Comparable em Java é usado para comparar a si mesmo com os outros objetos. Precisamos implementar a interface java.lang.Comparable na classe para usá-la e compará-la com as instâncias. Esta interface possui um único método denominado compareTo(object), que deve estar alinhado com os outros métodos do objeto. Esta função também define a ordem natural do objeto.

Usamos objetos Comparable em Java quando há uma única comparação padrão ou apenas uma implementação na mesma classe. Isso significa que podemos comparar os dois objetos apenas com base em dados únicos.

Usamos os operadores <, > e = para comparação. Eles são usados ​​para comparar o objeto presente com o objeto especificado.

  • Positivo, se o objeto presente > o objeto especificado.
  • Negativo, se o objeto presente < o objeto especificado.
  • Zero, se o objeto atual = o objeto especificado.

Por exemplo,

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

Produção:

105 Emp3 21
101 Emp1 23
106 Emp2 27

Java Comparator

O objeto Comparator é usado para comparar dois objetos diferentes na mesma classe ou em duas classes diferentes com a ajuda da implementação da interface java.lang.Comparator.

Usamos Comparator quando existe mais de uma maneira de comparar os dois objetos. Para usar a interface Comparator, a classe deve implementar o método compare(). Ele pode ser usado para comparar dois objetos de uma forma que pode não se alinhar com a ordem natural do objeto.

Por exemplo,

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

Produção:

Sorted: 
111 Emp1 Delhi
121 Emp3 Jaipur
131 Emp2 Up

Artigo relacionado - Java Comparator