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