¿Por qué mi ArrayList no se está ordenando usando la interfaz de comparador?
Intenté ordenar un ArrayList que consiste solo en elementos enteros en orden descendente utilizando la interfaz Comparator, pero después de imprimir el ArrayList, muestra los elementos en el orden en que se ingresaron.
Aquí está mi código…
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 compare devuelve un valor positivo, se realiza el intercambio de objetos. Por lo tanto, he devuelto 1
si a < b
para ordenar el array en orden descendente. ¿Dónde me equivoqué?
davy.ai
El método
compare
en tu claseSort
no está correctamente implementado para ordenar elArrayList
en orden descendente.Para ordenar un
ArrayList
en orden descendente utilizando unComparator
, debes retornar -1 si el primer elemento es mayor que el segundo elemento, y retornar 1 si el segundo elemento es mayor que el primer elemento. Si son iguales, entonces retorna 0.Por lo tanto, la implementación corregida del método
compare
sería:Esto asegurará que el
ArrayList
se ordene en orden descendente.