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

public class Uso_Comparadores implements Comparable {

    private String Nombre;
    private String Apellido;
    private int Edad;
    
    public Uso_Comparadores(String unNombre, String unApellido, int unaEdad) {
        Nombre   = unNombre;
        Apellido = unApellido;
        Edad     = unaEdad;
    }

    public int compareTo(Object arg0) {       
        Uso_Comparadores c = (Uso_Comparadores) arg0;
        // ordenar por Apellido
        //return this.Apellido.compareTo(c.Apellido);
        // ordenar por Nombre
        //return this.Nombre.compareTo(c.Nombre);

        //return Integer.toString(this.Edad).compareTo(Integer.toString(c.Edad));
        if(this.Edad < c.Edad) return -1;
        else if(this.Edad == c.Edad) return 0;
        else return -1;
    }
    
    public String Datos() {
        return Nombre + " " + Apellido + " " + Edad;
    }
    
    static public void main(String args[]) {
        List <Uso_Comparadores> miLista = new ArrayList();
        
        miLista.add(new Uso_Comparadores("Juan", "Reyes", 21 ));
        miLista.add(new Uso_Comparadores("Luis", "Alba", 31 ));
        miLista.add(new Uso_Comparadores("Maria Luisa", "Jaimes", 23 ));
        miLista.add(new Uso_Comparadores("Adan", "Zavala", 18 ));
        
        System.out.println("Datos sin ordenar");
        for(Uso_Comparadores i : miLista) 
            System.out.println(i.Datos());
        
        System.out.println("Datos ordenados");        
        Collections.sort(miLista);

        for(Uso_Comparadores i : miLista) 
            System.out.println(i.Datos());
        
        System.out.println("Resultado de la Busqueda");
        
        Object a = new Uso_Comparadores("algo", "algo", 18);
        int indice = Collections.binarySearch((List)miLista, a);
        System.out.println(miLista.get(indice).Datos());

    }
}
