Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

155
Visualizações
¿Por qué mi lista de arreglos no se ordena usando la interfaz del comparador?

Así que intenté ordenar una lista de matrices que consiste solo en elementos enteros en orden descendente usando la interfaz del comparador, pero después de imprimir la lista de matrices, muestra los elementos en el orden en que se proporcionó la entrada.

aqui esta mi codigo...

 import java.io.*; import java.util.*; public class Test { public static class Sort implements Comparator<Integer>{ public int compare(Integer a,Integer b){ if(a<b){ return 1; } return 0; } } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n=Integer.parseInt(br.readLine()); ArrayList<Integer> arraylist=new ArrayList<>(); for(int i=0;i<n;i++){ arraylist.add(Integer.parseInt(br.readLine())); } Collections.sort(arraylist,new Sort()); System.out.println(arraylist); br.close(); } }

Entonces, lo que aprendí es que si el método de comparación devuelve un valor positivo, entonces se produce el intercambio de objetos. Así que devolví 1 si a<b para ordenar la matriz en orden descendente. ¿Qué hice mal?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Como se comenta en los Comentarios, su código viola los términos del contrato del Comparator . Según Jon Skeet , el Javadoc explica que "el implementador debe asegurarse de que sgn(compare(x, y)) == -sgn(compare(y, x)) para todo x e y".

Y, usted está trabajando demasiado duro.

Cuando desee invertir el orden, descendiendo en lugar de ascendiendo, simplemente llame a Comparator#reversed . Esta llamada devuelve un nuevo objeto Comparator para que lo use.

Dado que la clase Integer implementa Comparable , no necesita definir un comparador inicial. Simplemente llame a Comparator#reverseOrder . Esta llamada invierte el orden natural de los objetos.

 List< Integer > myList = new ArrayList <> ( List.of( 7 , 1 , 42 ) ) ; myList.sort( Comparator.reverseOrder() );

Vea este código ejecutado en vivo en IdeOne.com .

[7, 1, 42]

[42, 7, 1]

over 4 years ago · Santiago Trujillo Relatório

0

Su código falla porque no devolvió el valor "-1" y devolvió "0" no está en otra declaración. Entonces, cuando realiza la función ordenar (), siempre devuelve "0" para cada comparación.

Simplemente reescriba una declaración if y funciona bien.

Vea el ejemplo a continuación:

 public static class Sort implements Comparator<Integer> { public int compare(Integer a, Integer b) { if (a < b) { return 1; } else if (a == b) { return 0; } else return -1; } }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda