entreLineas()


Pregunta de entrevista técnica #1 ¿En java para qué sirven los métodos equals() y hashCode() en un objeto?

Aquí comienzo una serie de pequeños artículos para aprender a responder a preguntas típicas de una entrevista técnica, por un lado aprenderás a desenvolverte mejor y a la vez obtendrás conceptos interesantes que te pueden ser útiles en tu día a día, empezamos por un clásico de los clásicos, los dos métodos que puedes encontrar por defecto en toda clase que extienda de Object en Java, o sea, todas.

equals()

El método equals() de la clase Object se utiliza para comprobar si el objeto actual es igual o no al objeto que se pasa. Por defecto, comprueba la dirección de memoria del objeto de las instancias. Si ambos objetos tienen la misma dirección de memoria, entonces son iguales.

hashCode()

El hashCode(), de la clase Object, se utiliza para identificar un objeto de forma única. De forma predeterminada, devuelve la dirección de memoria del objeto en un formato de número entero.

La ventaja de utilizar juntos equals() y hashCode()

Para las clases IntegerFloatString, etc, no tienes que preocuparte por ellas. Pero para tus propias clases, es posible que desee sobrescribir estos métodos, siempre para casos especiales y no todo siempre. 

Por ejemplo, si deseas usarlo como una clave en un Map o si no quieres tener objetos duplicados y esa duplicación está basada en algunos campos de identificación de la clase.

Al sobrescribirlo, nos aseguramos que equals() se base en hashCode() y hashCode() se base en un valor único. Entonces, si obj1.equals(obj2) es true, entonces obj1.hashCode() == obj2.hashCode() deberá ser true. Si no, pueden comportarse de formas muy extrañas.

Ejemplo:

Supongamos que tengo una identificación int (int id) en mi clase que debe ser única para cada objeto y no me importa si hay otros campos duplicados excepto este. Y quiero hacer de este objeto una clave para un Map. Entonces sobrescribimos los métodos hashCode() y equals() de esta manera:

private int id;
@Override
public int hashCode(){
    return this.id;
}
@Override
public int equals(Object obj){
    if(obj == null) 
    	return false;
    if(! obj instanceOf ThisClassName) 
    	return false;
    return this.id == obj.id;
}

Respuestas

  1. buying androxal generic lowest price

    androxal low cost in canada

    ordering androxal cheap mastercard

  2. order enclomiphene cheap with fast shipping

    buy cheap enclomiphene usa discount

    order enclomiphene purchase discount

  3. ordering rifaximin purchase from uk

    buying rifaximin australia cheap

    buy rifaximin generic no prescription

  4. how to buy xifaxan american pharmacy

    discount canadian pharmacy xifaxan

    xifaxan without prescription cheap

  5. purchase staxyn generic from canadian pharmacy

    buy cheap staxyn generic alternatives

    buy cheap staxyn generic side effect

  6. how to order avodart price netherlands

    ordering avodart australia online generic

    How to get a avodart perscription

  7. buying dutasteride cost uk

    cheapest buy dutasteride generic version

    buying dutasteride generic best price

  8. flexeril cyclobenzaprine without a prescription or doctor

    how to buy flexeril cyclobenzaprine price south africa

    online order flexeril cyclobenzaprine uk london

  9. order gabapentin usa mastercard

    buy gabapentin no prescription mastercard

    buy cheap gabapentin generic usa

  10. purchase fildena uk order

    buying fildena uk over the counter

    purchase fildena generic alternatives

  11. buying itraconazole purchase in canada

    cheap itraconazole generic buy online

    how to buy itraconazole price in canada

  12. sobota kamagra

    sleva kamagra kanada

    kamagra z kanadské lékárny

  13. acheter kamagra et payer par livraison

    kamagra livraison pendant la nuit

    prix bas kamagra sans ordonnance

  14. hello world

    hello world

    hello world