U10-06-Clases en Java – Comparator

La interfaz Comparator en Java es una herramienta potente que permite comparar objetos de cualquier tipo, a diferencia de la interfaz Comparable que solo compara objetos del mismo tipo. Proporciona un mecanismo flexible para definir criterios de comparación personalizados para diferentes tipos de objetos.

Propósito:

  • Define un método único llamado compare para comparar dos objetos de cualquier tipo.
  • Proporciona un mecanismo para ordenar objetos utilizando métodos como Collections.sort y Arrays.sort con un criterio de comparación personalizado.
  • Permite usar objetos como llaves en Mapas ordenados y elementos en Conjuntos ordenados basados en un criterio específico.

Método compare:

  • Es un método abstracto (sin implementación en la propia interfaz).
  • Recibe dos objetos como argumentos.
  • Devuelve un entero con el siguiente significado:
    • 0: Los objetos son iguales.
    • Valor negativo: El primer objeto es menor que el segundo objeto.
    • Valor positivo: El primer objeto es mayor que el segundo objeto.
package U2;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;

public class E00_00 {

	public static void main(String[] args) {
		
		int[] numeros = new int[3];
		numeros[0]=3; numeros[1]=1; numeros[2]=2;
		System.out.println(Arrays.toString(numeros));
		Arrays.sort(numeros);
		System.out.println(Arrays.toString(numeros));
		
		Persona p0=new Persona (0,"Carlos");
		Persona p1=new Persona (5,"Lara");
		Persona p2=new Persona (2,"Maria");
		
		ArrayList<Persona> personas = new ArrayList<Persona>();
		personas.add(p2); personas.add(p1); personas.add(p0);
		

		System.out.println(personas);
		personas.sort(null);
		System.out.println(personas);
		personas.sort(new porId());
		System.out.println(personas);
		personas.sort(new porIdInv());
		System.out.println(personas);
		
		System.out.println("***********************");
		Persona[] aPersonas = new Persona[3];
		aPersonas[0]=p1;	aPersonas[1]=p2;	aPersonas[2]=p0;
		System.out.println(Arrays.toString(aPersonas));
		Arrays.sort(aPersonas);
		System.out.println(Arrays.toString(aPersonas));
		Arrays.sort(aPersonas,new porId());
		System.out.println(Arrays.toString(aPersonas));
		
		
	}
}

class porId implements Comparator{
	@Override
	public int compare(Object o1, Object o2) {
		return  ((Persona) o1).id - ((Persona) o2).id; 
	}
}

class porIdInv implements Comparator{
	@Override
	public int compare(Object o1, Object o2) {
		return  ((Persona) o2).id - ((Persona) o1).id; 
	}
}


class Persona implements Comparable{
	int id;
	String nombre;
	Persona (int i,String n){
		this.id=i;
		this.nombre=n;
	}
	public String toString() {
		return "ID: " + this.id + " Nombre: " + this.nombre;
	}
	@Override
	public int compareTo(Object o) {
		Persona p=(Persona) o;
		return(this.nombre.compareTo(p.nombre));
	}
}

Related Posts