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
yArrays.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));
}
}