Diferença entre Comparable e Comparator em Java

Índice:

Anonim

O que é comparável em Java?

Comparável em Java é um objeto para se comparar a outro objeto. Isso 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.

Neste tutorial Comparador vs Comparável em Java, você aprenderá:

  • O que é comparável em Java?
  • O que é Comparator em Java?
  • Método usado em Comparable:
  • Método usado no Comparador:
  • Diferença entre Comparable vs Comparator em Java
  • Melhores práticas ao usar comparador e comparável em Java

O que é Comparator em Java?

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

PRINCIPAIS DIFERENÇAS:

  • Comparable fornece o método compareTo () para classificar elementos em Java, enquanto o Comparator fornece o método compare () para classificar elementos em Java.
  • A interface comparável está presente no pacote java.lang, enquanto a interface Comparator está presente no pacote java.util.
  • Comparable fornece uma sequência de classificação única, enquanto o Comparator fornece várias sequências de classificação.
  • Comparável afeta a classe original, enquanto o comparador não afeta a classe original.

Método usado em Comparable:

A seguir está um método importante usado na interface Comparable:

Comparado a():

O 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 classificar 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 objeto que você vai comparar.

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

Resultado:

  • Retorna 0 se os valores forem iguais.
  • No caso, se o objeto tiver um valor menor, então este método retorna um valor negativo.
  • Se o objeto tiver um valor superior, ele retornará um valor positivo.

Exemplo do método CompareTo ():

O seguinte programa de exemplo comparável em 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 ambos 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"));}}

Resultado

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

Método usado no Comparador:

A seguir estão os métodos importantes usados ​​na interface do comparador:

Comparar():

Compare () permite que você solicite objetos. Para fazer isso, você deve criar uma classe que implemente a interface do comparador. Depois disso, você precisa substituir seu 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 ().

Resultado:

  • Ele 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ê deve 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 do 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 zeroSystem.out.println(Integer.compare(x, y));int p = 40;int q = 40;// as 30 equals 30,// Output will be zeroSystem.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 zeroSystem.out.println(Integer.compare(r, s));}}

Resultado:

-101

É igual a():

Equals () verifica se o objeto de número é igual ao objeto, que é passado como um argumento ou não.

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

public boolean equals (objeto o)

Este método leva 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 do 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 curta. O primeiro resultado é falso, pois 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 a variável 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));}}

Resultado

falsetruefalse

Diferença entre Comparable vs Comparator em Java

Diferença entre Comparable vs Comparator em Java

Aqui estão as principais diferenças entre Java Comparable vs 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 classificação deve estar na mesma classe cujo objeto você irá classificar. A lógica da classificação deve estar em uma classe separada para escrever diferentes classificações 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 de comparação.
Ele fornece sequências de classificação simples. Ele fornece várias sequências de classificação.
Este método pode classificar os dados de acordo com a ordem de classificação natural. Este método classifica os dados de acordo com a ordem de classificação personalizada.
Isso 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: Calendar, Wrapper classes, Date e String. Ele é implementado para classificar instâncias de classes de terceiros.
Todas as classes de wrapper e classe String implementam interface comparável. As únicas classes implementadas de Comparator são Collator e RuleBasedColator.

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 em implementa uma interface comparável.
  • É possível usar TreeSet e TreeMap ou ao classificar Conjunto ou Mapa.
  • O método compareTo () funciona com comparador e também com comparáveis.
  • Use a interface do comparador apenas quando você
  • 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.