Comparável vs Comparador em Java

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

  • Comparável em Java é um objeto para comparar-se com outro objeto, enquanto Comparator é um objeto para comparar diferentes objetos de diferentes classes.
  • Comparável fornece o compareTo() método para classificar elementos em Java, enquanto o Comparator fornece o compare() método para classificar elementos em Java.
  • Uma interface comparável está presente em java.lang pacote, enquanto a interface Comparator está presente em java.util pacote.
  • 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 Comparator não afeta a classe original.

Diferença entre Comparável e Comparador
Diferença entre Comparável e Comparador

Aqui, analisei a diferença entre comparável e Comparador e avaliarei de forma abrangente seus prós e contras.

O que é comparável em Java?

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

Método usado em comparável

Gostaria de destacar um método importante que utilizo com frequência na interface Comparable:

Comparado a():

O método CompareTo() é usado para executar ordenação natural em uma string. O significado de ordenação natural é a ordem de ordenação que se aplica ao objeto, por exemplo, ordem numérica para ordenação de inteiros, ordem alfabética para String, etc.

A sintaxe de CompareTo() método é o seguinte:

int compareTo(T obj)

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

CompareTo() O método compara o objeto com T obj.

Saída:

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

Um exemplo de comparável em Java

O seguinte programa de Java exemplo comparável 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

O que é um comparador em Java?

Um comparador in Java é um objeto para comparar diferentes objetos de diferentes classes. A interface do comparador em Java também é usado 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).

Método usado no Comparador

Na minha prática, frequentemente confio nos seguintes métodos críticos da interface do comparador:

Comparar():

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

A sintaxe do compare() método é o 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(). compare() método.

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.

Um exemplo de comparável em Java

No abaixo Java exemplo comparador, 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 equals() método é o seguinte:

public boolean equals(Object o)

Este método aceita dois parâmetros: 1) qualquer objeto e 2) um 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, compararei 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 das variáveis ​​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

Diferenças entre Comparável e Comparador em Java

Muitas vezes vejo confusão entre Java Comparável e Comparador; aqui está a principal diferença:

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

Base de comparação Comparável Comparador
Forma Ofertas comparáveis compareTo() método para classificar elementos em Java. Comparador fornece compare() método para classificar elementos em Java.
Pacote Uma interface comparável está presente em java.lang pacote. Uma interface comparadora está presente em java.util pacote.
Lógica de classificação A lógica de classificação deve estar na mesma classe do objeto que você irá classificar. A lógica de classificação deve estar em classes separadas para escrever diferentes classificações com base em diferentes atributos de objetos.
Objeto de classe A classe cujos objetos você deseja classificar deve implementar a interface Comparable. Uma classe cujos objetos você deseja classificar não precisa implementar uma interface comparadora.
Classificando sequências Ele fornece sequências de classificação únicas. Ele fornece várias sequências de classificação.
Ordem 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.
Aula Afeta a classe original. ou seja, a classe real é alterada. Não afeta a classe original, ou seja, a classe real não é alterada.
Uso Implementado frequentemente na API por Calendário, classes Wrapper, Data e
Corda.
É implementado para classificar instâncias de classes de terceiros.
Executar Todas as classes wrapper e classes de string implementam interfaces comparáveis. As únicas classes implementadas do Comparator são Collator e RuleBasedColator.

Melhores práticas ao usar Comparator e Comparable 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 das classes principais disponíveis implementam uma interface comparável.
  • É possível usar TreeSet e TreeMap ao classificar Set ou Map.
  • O compareTo() O método funciona tanto com comparador quanto comparável.
  • Use a interface do comparador somente quando você precisar de mais flexibilidade.
  • O compareTo() O método 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.

Como escolher entre um comparável e um comparador

Conclusivamente, minha experiência prática sugere que aproveitar o Comparable e o Comparator em Java eleva significativamente o controle que temos sobre a classificação de dados, melhorando o desempenho e a funcionalidade.