Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Comparable e Comparator

Eu dei uma olhadinha e mesmo assim estou tendo dúvida, alguém poderia me esclarecer a diferença de um e outro? Eu notei que o nome dos métodos que precisam ser implementados no Comparable e Comparator são, respectivamente: compareTo(String s) e compare(String s, String i), assim, um recebe apenas um parâmetro, enquanto o outro dois. Porém, existe mais alguma diferença? Agradeço a atenção.

2 respostas
solução!

Oi Nícholas, é difícil mesmo no primeiro momento ver a diferença entre ambos. Acho que facilita pensar da seguinte forma:

O Comparable permite que uma determinada classe diga como uma instância dela deverá ser comparada com outras instâncias dela mesma.

Por exemplo: Pessoa é comparada com outra pessoa de acordo com a sua altura. Então a classe Pessoa, que implementa Comparable terá o método compareTo verificando qual é a maior ou menor altura. Como a classe Pessoa só pode implementar Comparable uma vez, podemos dizer que essa é a regra oficial de comparação de Pessoa.

Já o Comparator permite que você crie regras extras de comparação para as classes que você possui. Por exemplo, você pode criar uma classe chamada ComparadorDeIdade, que irá comparar a idade de pessoas para ver quem é mais velho ou mais novo. Uma outra regra "não oficial" de comparação que você pode ter é a comparação de pessoas pelo tamanho do nome. Quem tem nome mais longo vem por último.

public class ComparadorDeIdade extends Comparator<Pessoa> {
    public int compareTo(Pessoa pessoa1, Pessoa pessoa2) {
       // lógica para fazer a comparação
   }
}

Então resumindo, o Comparable permite que você diga uma regra de comparação para a classe que implementar essa interface, como uma espécie de regra padrão ou regra oficial, enquanto que se você quiser fugir dessa regra padrão, você pode criar suas classes comparadoras, que vão extender a classe Comparator fazendo cada uma a sua própria regra.

Veja se ficou claro e qualquer coisa, avise.

Ficou claro a ideia sim, muito obrigado pela resposta, agora só preciso por em prática.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software