Comparación de objetos en Java

Hola a todos, hoy os explicare como comparar objetos de nuestras clases en Java.

Por defecto, al crear un objeto tenemos un método llamado equals que viene de la clase java.lang.Object (es heredada por defecto de todas las clases que creamos).

Cuando comparamos dos objectos, por este método heredado, determina si la dirección de los objetos es igual. Por ejemplo:

¿Podríamos definir nosotros este método indicando que se debe cumplir para que sean iguales? La respuesta es sí, podemos sobrescribir este método, como ya vimos en su momento. La definición del método es:

public boolean equals (objeto_clase a)

Supongamos que para que un empleado sea igual que otro tenga el nombre y apellido igual. Veamos como se implementaría el método equals en la clase Empleado.

Ahora comprobamos que funciona el método.

Hasta ahora, hemos visto que debemos hacer para que comprobar que dos objetos sean iguales.

También podemos indicar si un objeto es mayor o menor que otro, por ejemplo, si un empleado tiene mas años que otro, indicaremos que es mayor.

Para ello usaremos el método compareTo (es parecido al método de String de Java), implementaremos la interfaz Comparable. Veamos como se hace:

Como vemos, usamos para implementar esta interfaz, es porque esta parametrizada, esto lo explicaremos con mas detalle más adelante.

Ahora nos obligara a implementar el método compareTo, esta es su definición:

Implementaremos el método según como queramos determinar que un objeto es mayor que otro. Así queda:

Veamos un ejemplo practico:

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

Compartir

10 comentarios

  1. Warrior

    Esto de «if» y «Else» si me suena de mis clases de informatica, aunque a mi el unico programa que me enseñaron a manejar es el Turbo C ++. Por eso es que no entiendo nada de otros programas…. pero mmm creo que ya voy captando Java… es el codigo Html con el que se hacen las paginas no???

    Hablando de eso tengo un problema en mi blog, ya instale el boton + 1 , puse el gaget de google, lo intente instalar manualmente en el codigo de la plantilla… y ps nada que el maldito boton no quiere hacer acto de presencia… Algunda idea de porque sera eso?
    Sera culpa de mi plantilla o algo así?

    Saludos…

    te hare amigo en google + si aun no te tengo

    Traffic Club

    Blog de warrior oThe Outsiders Inc.

  2. Disco Duro de Roer Post author

    Creo que te confundes con JavaScript, no tiene nada que ver con Java.

    En cuanto a lo de tu botón, a mi me paso algo parecido con lo del botón de Google+, puedes probar a cambiar de plantilla o esperar a que google lo arregle. Prueba a buscar en Internet, debe haber algún widget más aunque no sea de google. Un saludo y gracias por tu comentario.

  3. Willi

    Hola soy nuevo en esto de la programación esta todo muy bien explicado pero como le haría si tengo un Arraylist lleno de objetos tipo Empleado y quisiera saber si entre esos mismos objetos hay alguno que se repita por ejemplo:
    Si en mi mismo ArrayList hubiera estos dos objetos :
    Empleado empleado1=new Empleado(«Fernando», «Ureña», 23, 600);
    Empleado empleado2=new Empleado(«Fernando», «Ureña», 23, 600);
    Como podría extraer esos que están repetidos para así uno de ellos asignarle por ejemplo un nuevo apellido para que se vuelva un objeto diferente??? .Todo esto sin perder ningún objeto! , Osea seguir conservando los objetos:
    empleado1
    empleado2
    pero ya con atributos diferentes, por lo que nunca cambiaria el tamaño de mi ArrayList… Alguien que pueda ayudarme se lo agradecería bastante!!

  4. Disco Duro de Roer Post author

    Facil, tendrias que tener un metodo equal para determinar cual es o no igual, recorrer el arrayList con dos bucles anidados y cuando encuentre el repetido (siempre que no sea el mismo objeto) pues le cambias lo que quieras con los metodos set de los atributos.

    Si necesitas algo mas, puedes contactar con nosotros, desde contactanos.

    Un saludo.

  5. zawex

    saludos,

    if(this.edad==a.getEdad()){ <<<— aqui podemos usar a.edad para trabajar con ese valor en vez de una funcion getEdad ??
    lo compile y no da error….hay alguna diferencia practica ?

    gracias…

    PD excelentes posts

  6. admin Post author

    Para lo que dices, debes hacer public en el atributo de edad.

    Pero no es recomendable que se pueda acceder a los atributos de forma directa.

    Un saludo

  7. Julian

    Buenas, te hago una consulta. Yo tengo un arraylist donde tengo varias clases heredadas de «Persona», es decir «Empleado» y «Proveedor», como puedo hacer para recorrer esta lista y filtrar los que pertenecen a la clase «Empleado» y los que pertenecen a «Proveedor»?

    Saludos y gracias

  8. Noah

    Deberían de haber puesto el codigo completo para los que no entendemos y literalmente estamos empezando. En mi caso en vez de dos strings (nombre y apellido) yo tenía que comparar un string y un número. Sin embargo nunca pude hacer mover el metodo. simplemente me tira un error diciendo que el parametro ese del metodo boleano cannot be resolved to a type….

  9. Noah

    Olviden mi comentario anterior, ya lo logré. Por una pequeña letra no me arrancaba el asunto jaja

  10. Cristian

    Hola puede ser que este mal la sintaxis en la linea 3 dentro del metodo equals (en el segundo fragmento de codigo)??

    if(a.getNombre().equals(nombre) && a.getApellido().equals(apellido)){

    no deberia ser ???

    if(a.getNombre()==nombre) && (a.getApellido()==apellido){

    Saludos

Deja una respuesta

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


Warning: Trying to access array offset on value of type null in /home2/discodur/public_html/discoduroderoer/wp-content/themes/disto/single.php on line 539