Comparável e Comparador em Java – Diferença entre eles

Diferença chave entre comparável e comparador em Java

  • Comparable em Java é um objeto para comparar-se com outro objeto, enquanto Comparator é um objeto para comparar diferentes objetos de diferentes classes.
  • Comparable fornece o método compareTo() para classificar elementos em Java, enquanto Comparator fornece o método compare() para classificar elementos em Java.
  • Uma interface comparável está presente no pacote java.lang, enquanto a interface Comparator está presente no pacote java.util.
  • Comparable fornece uma única sequência de classificação, enquanto Comparator fornece múltiplas sequências de classificação.
  • Comparable afeta a classe original, enquanto comparador não afeta a classe original.
Diferença entre Comparável e Comparador em Java
Diferença entre Comparador e Comparável em Java

O que é comparável em Java?

Comparável em Java é um objeto para se comparar com outro objeto. Ajuda a classificar a lista de objetos personalizados. A interface java.lang.Comparable deve ser implementada por uma classe para comparar suas instâncias. A matriz de objetos que implementam uma interface comparável é classificada automaticamente pelos métodos Arrays.sort e Collections.sort.

O que é comparador em Java?

Comparador em Java é um objeto para comparar diferentes objetos de diferentes classes. A interface do comparador em Java também é usada para organizar os objetos de classes definidas pelo usuário. Inclui dois importantes métodos de interface de comparação conhecidos como comparar (objeto obj1, objeto obj2) e igualar (elemento objeto).

Diferenças entre Comparável e Comparador em Java

Aqui está a principal diferença entre Java Comparable e Comparator:

Comparável Comparador
Comparable fornece o método compareTo() para classificar elementos em Java. Comparator fornece o método compare() para classificar elementos em Java.
Interface comparável está presente no pacote java.lang. A interface do comparador está presente no pacote java.util.
A lógica de ordenação deve estar na mesma classe cujo objeto você vai ordenar. A lógica de classificação deve estar em uma classe separada para escrever classificações diferentes com base em diferentes atributos de objetos.
A classe cujos objetos você deseja classificar deve implementar uma interface comparável. A classe cujos objetos você deseja classificar não precisa implementar uma interface comparadora.
Ele fornece sequências de classificação únicas. Ele fornece várias sequências de classificação.
Este método pode classificar os dados de acordo com a ordem natural de classificação. Este método classifica os dados de acordo com a ordem de classificação personalizada.
Afeta a classe original. ou seja, a classe real é alterada. Não afeta a classe original, ou seja, a classe real não é alterada.
Implementado frequentemente na API por: Calendário, classes Wrapper, Data e
Corda.
É implementado para classificar instâncias de classes de terceiros.
Todas as classes wrapper e classe String implementam interface comparável. As únicas classes implementadas do Comparator são Collator e RuleBasedColator.

Método usado em comparável

O seguintewing é um método importante usado na interface Comparable:

Comparado a():

Método CompareTo() é usado para realizar a classificação natural na string. O significado da classificação natural é a ordem de classificação que se aplica ao objeto, por exemplo, ordem numérica para classificação de inteiros, ordem alfabética para String, etc.

A sintaxe do método CompareTo() é a seguinte:

int compareTo(T obj)

Na sintaxe acima, T significa o tipo de objetos que você irá comparar.

Comparação do método CompareTo()ares o objeto com T obj.

Saída:

  • Ele retorna 0 se os valores forem iguais.
  • Caso o objeto tenha um valor menor, então este método retorna um valor negativo.
  • Se o objeto tiver um valor maior, ele retornará um valor positivo.

Exemplo de método CompareTo():

O seguintewing programa de exemplo comparável Java mostra a comparação de dois caracteres, “a” e “b”. O caractere “a” vem antes de “b” em ordem alfabética.

Portanto, a saída é -1. O caractere “b” vem depois de “a” em ordem alfabética. Portanto, a saída é 1. Os caracteres “a” e “b” são equivalentes. Portanto, a saída é 0.

public class Sample_String {
    public static void main(String[] args) {
        String str_Sample = "a";
        System.out.println("Compare To 'a' b is : " + str_Sample.compareTo("b"));
        str_Sample = "b";
        System.out.println("Compare To 'b' a is : " + str_Sample.compareTo("a"));
        str_Sample = "b";
        System.out.println("Compare To 'b' b is : " + str_Sample.compareTo("b"));
    }
}

saída

Compare To 'a' b is : -1
Compare To 'b' a is : 1
Compare To 'b' b is : 0

Método usado no Comparador

Following são os métodos importantes usados ​​na interface do comparador:

Comparar():

Compare() permite ordenar objetos. Para fazer isso, você deve criar uma classe que implemente a interface comparadora. Depois disso, você precisa substituir o método de comparação.

A sintaxe do método compare() é a seguinte:

compare(Object obj1, Object obj2)

Na sintaxe acima, obj1 e obj2 são dois objetos que você deve comparar usando o método compare().

Saída:

  • Retorna um número inteiro negativo se o primeiro argumento for menor que o segundo.
  • Retorna zero se o primeiro argumento e o segundo argumento forem iguais.
  • Este método pode retornar um número inteiro positivo, caso o primeiro argumento seja maior que o segundo.

Você tem que garantir que a relação seja transitiva. Por exemplo, ((compare(a, b)>0) && (compare(b, c)>0)) que implica compare(a, c)>0.

Exemplo de método de comparação:

No programa abaixo de exemplo de comparador Java, existem 6 variáveis. “x”, “y”, “p”, “q”, “r” e “s”. A saída é -1 porque o valor de “x”, 20 é menor que o valor de “y”, 30. A saída é 0 porque o valor de “p”, 40 é igual ao valor de “q”, 40 .

import java.lang.Integer; 
public class example { 
    public static void main(String args[]) 
    { 
        int x = 20; 
        int y = 30; 
        // as 10 less than 20, 
        // Output will be a value less than zero 
        System.out.println(Integer.compare(x, y)); 
        int p = 40; 
        int q = 40; 
        // as 30 equals 30, 
        // Output will be zero 
        System.out.println(Integer.compare(p, q)); 
        int r = 20; 
        int s = 7; 
        // as 15 is greater than 8, 
        // Output will be a value greater than zero 
        System.out.println(Integer.compare(r, s)); 
    } 
}

Saída:

-1
0
1

É igual a():

Equals() verifica se o objeto numérico é igual ao objeto passado como argumento ou não.

A sintaxe do método equals() é a seguinte:

booleano público é igual (Objeto o)

Este método usa dois parâmetros 1) qualquer objeto 2) valor de retorno. Ele retorna verdadeiro se o argumento passado não for nulo e for um objeto de tipo semelhante com o mesmo valor numérico.

Exemplo de método igual:

No exemplo abaixo, estamos comparando as quatro variáveis ​​entre si. Três variáveis ​​são do tipo inteiro e uma do tipo short. O primeiro resultado é falso porque o valor de p, que é 5, não é igual ao valor de q, que é 20.

O segundo resultado é verdadeiro porque o valor da variável p e r é o mesmo, que é 5. Por último, a saída é falsa, pois as variáveis ​​p e s têm valores atribuídos diferentes.

public class Test { 
   public static void main(String args[]) {
      Integer p = 5;
      Integer q = 20;
      Integer r =5;
      Short s = 5;
      System.out.println(p.equals(q));  
      System.out.println(p.equals(r)); 
      System.out.println(p.equals(s));
   }
}

saída

false
true
false

Melhores práticas ao usar comparador e comparável em Java

  • Use uma interface comparável quando a comparação for padrão para a classe específica.
  • Você pode usar lambdas com um comparador.
  • Muitas classes principais disponíveis implementam uma interface comparável.
  • É possível usar TreeSet e TreeMap ou durante a classificação de Set ou Map.
  • O método compareTo() funciona tanto com comparador quanto comparável.
  • Use a interface do comparador somente quando você precisar de mais flexibilidade.
  • O método compareTo() retornará um número inteiro positivo se o primeiro objeto for maior que o outro, negativo se for menor e zero se ambos forem iguais.