Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

148
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!