Digamos que creo un objeto y lo agrego a mi ArrayList
. Si luego creo otro objeto con exactamente la misma entrada de constructor, ¿el método evaluará que los dos objetos sean iguales? Supongamos que el constructor no hace nada gracioso con la entrada, y las variables almacenadas en ambos objetos son idénticas.¿Cómo evalúa los objetos el método contains() de un ArrayList?
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 la class
deberían implementarse para tener retorno true
?
En caso de que planee anular equals(), asegúrese de anular el método hashcode() también. Si no lo haces, es posible que las cosas no funcionen como se esperaba al usar Colecciones? –
Esta es una respuesta correcta, pero tenga en cuenta que debe cambiar su método equals para aceptar un 'Object' en lugar de' Thing'. Si no lo haces, no se usará tu método igual. :) – mdierker
Acabo de descubrir que el eclipse tiene "Generar hashCode() y es igual a" en el menú de Origen. –