¿Cómo evalúa los objetos el método contiene() de ArrayList?

Resuelto Mantas Vidutis asked hace 14 años • 10 respuestas

Digamos que creo un objeto y lo agrego a mi ArrayList. Si luego creo otro objeto con exactamente la misma entrada del constructor, ¿el contains()método evaluará que los dos objetos sean iguales? Supongamos que el constructor no hace nada gracioso con la entrada y que las variables almacenadas en ambos objetos son idénticas.

ArrayList<Thing> basket = new ArrayList<Thing>();  
Thing thing = new Thing(100);  
basket.add(thing);  
Thing another = new Thing(100);  
basket.contains(another); // true or false?

class Thing {  
    public int value;  

    public Thing (int x) {
        value = x;
    }

    equals (Thing x) {
        if (x.value == value) return true;
        return false;
    }
}

¿Es así como se classdebe implementar para tener contains()retorno true?

Mantas Vidutis avatar Apr 15 '10 10:04 Mantas Vidutis
Aceptado

ArrayList implementsla interfaz de lista.

Si observa el Javadoc paraList el containsmétodo, verá que utiliza el equals()método para evaluar si dos objetos son iguales.

Binary Nerd avatar Apr 15 '2010 04:04 Binary Nerd

Creo que las implementaciones correctas deberían ser

public class Thing
{
    public int value;  

    public Thing (int x)
    {
        this.value = x;
    }

    @Override
    public boolean equals(Object object)
    {
        boolean sameSame = false;

        if (object != null && object instanceof Thing)
        {
            sameSame = this.value == ((Thing) object).value;
        }

        return sameSame;
    }
}
ChristopheCVB avatar Oct 31 '2012 19:10 ChristopheCVB