Patricio Aros

xd

miércoles, 7 de diciembre de 2011

Cliente Servidor - Bonus Point 8:TreeSet de Autos

Autor: Patricio Aros Erices.
Competencia: Creatividad e Innovación.

Crear una colección del tipo TreeSet, que guarde 8 objetos derivados de la clase Auto (crear clase), la cual posee los atributos: patente, marca, modelo, año y rut del dueño, con los métodos set y get correspondientes (similar al diseño de la clase Persona).
  
En este bonus debiamos realizar lo anterior planteado, lo cual no era muy simple, ya que lo que estamos creando son objetos treeset uno tras otro, generando una especie de tabla de datos, comenzando por lo principal para resolver el problema, fue el metodo de los 4 pasos, el primero los ejemplos...obtiendo algo similar a esto

123-4, HD123, HYUNDAI, RCX700, 1990
 432-1, XDER1, MAZDA, Jumanji, 2000
464-5, JAE83, Mercedes, McLaren ,2011
111-1, KIL12, Mercedes, Delorean ,2024
515-5, JUB12, NISSAN, SkyLine, 2010
987-6, HEAV1, TOYOTA, 4x4, 1999
222-2, ELDER, CITROEN, NOSEQUEONDA, 1992
343-8, Jubi1, Freelance, Disanto, 1982
                                  [P]
111-1 -> KIL12 -> Mercedez -> Delorean -> 2024
123-4 -> HD123 -> HYUNDAI -> RCX700 -> 1990
222-2 -> ELDER -> CITROEN -> NOSEQUEONDA -> 1992
343-8 -> Jubi1 -> Freak -> Disanto -> 1982
432-1 -> XDER1 -> MAZDA -> Jumanji -> 2000
464-5 -> JAE83 -> Mercedez -> McLaren -> 2011
515-5 -> JUB12 -> NISSAN -> SkyLine -> 2010
987-6 -> HEAV1 -> TOYOTA -> 4x4 -> 1999

Lo mejor que tiene la clase TreeSet y como se puede utilizar es que es una especie de primary key, osea en el treeset no pueden haber datos iguales o seran eliminados y otra gracia que tiene es que los datos se ordenan solos, en nuestro caso como son varios datos dentro de un treeset se debia decirle como ordenarlos, usando el  compareTo() pero se sobreescribe ya que nosotros le daremos la idea de como ordenar los datos.
Un pequeño analisis de lo que hace el treeset o nuestro programa realmente es lo sig.
Aquí se muestra como se van guardando los datos ingresados dentro de un objeto tipo Auto

Diagrama del programa
Esto nos muestra que ingresamos los datos y estos se van a un objeto que debemos crear y el cual es Autos dentro de este se guardaran todos los datos para luego ser comparados, tenemos entonces la base de lo que hara nuestro programa, siguiendo un poco más aqui muestro el diagrama que realize, es simple pero explica en simples palabras lo que hace el programa.


Ahora el código, aquí hay 2 clases Auto. ya que necesitamos los objetos y los get y set correspondientes y la clase principal que hace uso de esta primera. pues bien aqui esta el codigo de la clase auto


public class Auto implements Comparable {
    String patente;
    String marca;
    String modelo;
    int año;
    String rutDueño;

    public Auto(){

    }

    public Auto(String rutDueño){
        this.rutDueño=rutDueño;
    }
    public Auto(String rutDueño,String patente,String marca,String modelo,int año){
        this.rutDueño=rutDueño;
        this.patente=patente;
        this.marca=marca;
        this.modelo=modelo;
        this.año=año;

    }
    public int getAño(){
        return año;
    }
    public void setaño(int año ){
        this.año=año;

    }
    public String getRut(){
        return rutDueño;
    }
    public void setRut(String rutDueño){
        this.rutDueño=rutDueño;
    }
    public String getPatente(){
        return patente;
    }
    public void setPatente(String patente){
        this.patente=patente;
    }
    public String getMarca(){
        return marca;
    }
    public void setMarca(String marca){
        this.marca=marca;
    }
    public String getModelo(){
        return modelo;
    }
    public void setModelo(String modelo){
        this.modelo=modelo;
    }

    @Override
    public boolean equals(Object objeto) {
        if (objeto == null) {
            return false;
        }

        Auto AutoIn = (Auto) objeto;
        String rutThis = this.getRut();
        String rutIn = AutoIn.getRut();
        System.out.println("rutThis: " + rutThis);
        System.out.println("rutIn: " + rutIn);

        if (rutThis.equalsIgnoreCase(rutIn)) {
            return true;
        }
        return false;
    }
    @Override
    public int hashCode() {
        int hash = 3;
        hash = 83 * hash + (this.rutDueño != null ? this.rutDueño.hashCode() : 0);
        return hash;
    }
    @Override
    public int compareTo(Object objetoIn){
            Auto otroAuto = (Auto) objetoIn;
            if (this.getRut().equalsIgnoreCase(otroAuto.getRut())) {
            return 0;
            }
            String[] rutDivIn = otroAuto.getRut().split("-");
            String[] rutDivThis = this.getRut().split("-");
            int rutSinGuionIn = Integer.parseInt(rutDivIn[0]); 
            int rutSinGuionThis = Integer.parseInt(rutDivThis[0]); 

            if (rutSinGuionThis > rutSinGuionIn){
            return 1;
            }
            if (rutSinGuionThis < rutSinGuionIn) {
            return -1;
            }
         return 1;
        }
    @Override
    public String toString() {
        return this.rutDueño + " -> " + this.patente + " -> " + this.marca + " -> " + this.modelo + " -> " + this.año;
    }
}


Y de manera separada tenemos la proxima clase que es la principal es decir una especie de clase que hace uso de los metodos y objetos definidos en la primera.



import java.util.Iterator;
import java.util.TreeSet;

public class CollectionTreeSetAuto {


    public static void main(String arg[]) {
        Auto car1 = new Auto("123-4", "HD123", "HYUNDAI", "RCX700", 1990);
        Auto car2 = new Auto("432-1", "XDER1", "MAZDA", "Jumanji", 2000);
        Auto car3 = new Auto("464-5", "JAE83", "Mercedez", "McLaren", 2011);
        Auto car4 = new Auto("111-1", "KIL12", "Mercedez", "Delorean", 2024);
        Auto car5 = new Auto("515-5", "JUB12", "NISSAN", "SkyLine", 2010);
        Auto car6 = new Auto("987-6", "HEAV1", "TOYOTA", "4x4", 1999);
        Auto car7 = new Auto("222-2", "ELDER", "CITROEN", "NOSEQUEONDA", 1992);
        Auto car8 = new Auto("343-8", "Jubi1", "Freak", "Disanto", 1982);

        TreeSet<Auto> listAut = new TreeSet<Auto>();
        listAut.add(car1);
        listAut.add(car2);
        listAut.add(car3);
        listAut.add(car4);
        listAut.add(car5);
        listAut.add(car6);
        listAut.add(car7);
        listAut.add(car8);

        System.out.println(" Lista posee " + listAut.size() + " Autos");

        Iterator iter = listAut.iterator();

        System.out.println("\n███ Lista Completa Autos. ███");
        while (iter.hasNext()) {
            System.out.println(iter.next().toString());
        }

    }
}


Reflexión 
Si bien es un ejercicio de bonus, presento gran desafio realizarlo ya que habiamos hecho uso anteriormente de treeset pero no de esta manera, donde se ingresan varios datos de una parte del treeset, ademas de hacer un metodo para que no se repiesen los datos y los borrara automáticamente el treeset. Personalmente me llamó mucho la atencion de esta clase y creo que se puede implementar en varios otros temas o para dar solución a los mismos en distintos ambitos.

0 comentarios:

Publicar un comentario