1
resposta

Duvida da logica aplicada no compare

Li algumas perguntas e respostas mas ainda não entendi muito bem

if(c1.getNumero() < c2.getNumero()){
            return -1;
        }

Aqui basicamente dentro do if, a condição foi que se o numero do c1 for menor que o numero do c2, então é retornado um "-1" E outro if é o contrario e retorna "1"

Então por essa logica eu entendi que quando ele for menor, é retornado -1 porque ele "desceria" na lista.

Mas é isso que retorna do for quando eu rodo a aplicação

(Não estou conseguindo colocar a imagem rs, mas é do terminal com as repostar dos for, no caso o segundo for)

Porque no for ele retorna do menor para o maior? Não deveria ser o contrario?

1 resposta

Olá Nikolle, tudo certo?

Peço desculpas pela demora em obter retorno.

O método compare() recebe dois parâmetros: a c1 e a c2 e faz a comparação partindo como referência da c1. As verificações feitas são as seguintes:

  • c1 é menor que c2? -> então retornar -1
  • c1 é maior que c2? -> então retornar 1
  • c1 é igual a c2? -> então retornar 0

lembrando que baseado no critério de ordenação definido, ou caso contrário a partir da ordem natural.

Portanto, a comparação vai acontecendo e verificando qual conta é maior que a outra, baseado no critério de ordenação definido. A ordem na qual a lista vai ficar ordenada, a partir disso (crescente ou decrescente), é definida a partir de como implementamos o sort(), mas por padrão é a ordem crescente. No entanto, caso invertêssemos as verificações para:

  • c1 é menor que c2? -> então retornar 1
  • c1 é maior que c2? -> então retornar -1

A lista ficaria ordenada na ordem reversa.

Para se aprofundar mais, recomendo a leitura da documentação do Java sobre a classe Comparable, que é a classe utilizada para fazer comparações e auxiliar para ordenações! A documentação está em inglês, mas caso seja necessário você pode utilizar a ferramente de tradução do seu navegador para auxiliar na compreensão!

Fico à disposição em caso de dúvidas.

Um grande abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!