Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

149
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda