¿Cómo evalúa los objetos el método contiene() de ArrayList?
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 class
debe implementar para tener contains()
retorno true
?
Aceptado
ArrayList implements
la interfaz de lista.
Si observa el Javadoc paraList
el contains
método, verá que utiliza el equals()
método para evaluar si dos objetos son iguales.
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;
}
}