es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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é?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El método compare en tu clase Sort no está correctamente implementado para ordenar el ArrayList en orden descendente.

    Para ordenar un ArrayList en orden descendente utilizando un Comparator, 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:

    public int compare(Integer a, Integer b) {
        if (a > b) {
            return -1;
        } else if (a < b) {
            return 1;
        } else {
            return 0;
        }
    }
    

    Esto asegurará que el ArrayList se ordene en orden descendente.

Comments are closed.