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 ocompare()
método para classificar elementos em Java. - Uma interface comparável está presente em
java.lang
pacote, enquanto a interface Comparator está presente emjava.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.
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:
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.