Formas de ordenar un ArrayList

Hola a todos, hoy os explico como podemos ordenar un ArrayList de forma automática.

Ya vimos formas de ordenar en java, en ArrayList lo tendríamos que hacer de la misma forma.

Aunque con un ArrayList podemos ordenarlo de dos formas automaticas.

  • 1º forma: usar comparable

Lo primero que debes hacer es implementar la interfaz comparable de esta forma:

implements Comparable<tu_clase>

Esto hará que te obliguen a que crees el método compareTo, aquí ya debes decidir la forma de ordenar, te dejo un tutorial sobre el compareTo.

Comparación de objetos en Java

Os dejo un ejemplo con la clase empleado, yo ordeno por salario:


public class Empleado implements Comparable<Empleado>{

    
    private String nombre;
    private String apellido;
    private int edad;
    private double salario;
    
    public static double PLUS=300;

    public Empleado(String nombre, String apellido, int edad, double salario) {
        this.nombre = nombre;
        this.apellido = apellido;
        this.edad = edad;
        this.salario = salario;
    }

    public Empleado(String nombre, String apellido, int edad) {
        this.nombre = nombre;
        this.apellido = apellido;
        this.edad = edad;
        
    }
    
    public Empleado(String nombre, String apellido) {
        this.nombre = nombre;
        this.apellido = apellido;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getApellido() {
        return apellido;
    }

    public void setApellido(String apellido) {
        this.apellido = apellido;
    }

    public int getEdad() {
        return edad;
    }

    public void setEdad(int edad) {
        this.edad = edad;
    }

    public double getSalario() {
        return salario;
    }

    public void setSalario(double salario) {
        this.salario = salario;
    }

    @Override
    public String toString() {
        return "Empleado{" + "nombre=" + nombre + ", apellido=" + apellido + ", edad=" + edad + ", salario=" + salario + '}';
    }

    public boolean plus() {
        boolean aumento = false;
        if (edad > 40) {
            salario += PLUS;
            aumento = true;
        }
        return aumento;
    }
    
    @Override
    public int compareTo(Empleado e){
        if(e.getSalario()>salario){
            return -1;
        }else if(e.getSalario()>salario){
            return 0;
        }else{
            return 1;
        }
    }
    
    
}


Ahora debemos utilizar lo siguiente:


Collections.sort(empleados);

Os dejo un ejemplo de ordenamiento.


import java.util.ArrayList;
import java.util.Collections;

public class Main {

    public static void main(String[] args) {

        ArrayList<Empleado> empleados = new ArrayList<>();

        Empleado e1 = new Empleado("fer1", "ure1", 60, 1500);
        Empleado e2 = new Empleado("fer2", "ure2", 50, 2000);
        Empleado e3 = new Empleado("fer3", "ure3", 42, 1000);

        empleados.add(e1);
        empleados.add(e2);
        empleados.add(e3);
        
        Collections.sort(empleados);
        
        for(Empleado aux: empleados){
            System.out.println(aux);
        }
        
    }

}

Orden original

Orden final

  • 2º forma: usar comparator

Para esta forma, crearemos una clase vacia con el nombre que queramos, esta clase debera implementar la interfaz Comparator.


implements Comparator<Empleado>

Esto nos obliga a crear el metodo compareTo, pero no es igual que el anterior, sino pasandole los dos objetos a comparar.

Por ejemplo:


import java.util.Comparator;

/**
 *
 * @author Fernando
 */
public class CompararEmpleados implements Comparator<Empleado>{
    
     @Override
     public int compare(Empleado e1, Empleado e2){
        if(e1.getEdad()>e2.getEdad()){
            return -1;
        }else if(e1.getEdad()>e2.getEdad()){
            return 0;
        }else{
            return 1;
        }
    }
    
    
}

En este caso lo ordeno por edad.

Ahora debemos hacer lo siguiente para ordenar:

Collections.sort(empleados,new CompararEmpleados());

Os dejo un ejemplo:


public class Main {

    public static void main(String[] args) {

        ArrayList<Empleado> empleados = new ArrayList<>();

        Empleado e1 = new Empleado("fer1", "ure1", 60, 1500);
        Empleado e2 = new Empleado("fer2", "ure2", 50, 2000);
        Empleado e3 = new Empleado("fer3", "ure3", 42, 1000);

        empleados.add(e1);
        empleados.add(e2);
        empleados.add(e3);
        
        Collections.sort(empleados,new CompararEmpleados());
        
        for(Empleado aux: empleados){
            System.out.println(aux);
        }
        
    }

}

Orden original:

Orden final

Seguro os preguntareis cual es la diferencia entre ambos, los dos hacen lo mismo. Para mi la diferencia es que la segunda forma nos permite ordenar de varias formas y la primera forma de una.

Mi consejo es utilizar la segunda solo cuando queráis ordenar de varias formas, si solo vais de ordenar de una pues es mejor la primera.

Espero que os haya sido de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

¿Te ha gustado y quieres apoyarme? ¡Sé mi patrón!
Etiquetas

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *