Tengo un problema donde hago una lista ArrayList de objetos, anulo el método equals, y no puedo obtener el método contains para llamar al método equals. He intentado anular iguales y hashcode juntos, pero todavía no funciona. Estoy seguro de que hay una explicación lógica de por qué es esto, pero no puedo resolverlo en este momento en mi propia jaja. Solo quiero ver si la lista contiene la identificación especificada..Contains() método no llamando Ignorar Igual al método
Aquí hay algo de código:
import java.util.ArrayList;
import java.util.List;
public class Foo {
private String id;
public static void main(String... args){
Foo a = new Foo("ID1");
Foo b = new Foo("ID2");
Foo c = new Foo("ID3");
List<Foo> fooList = new ArrayList<Foo>();
fooList.add(a);
fooList.add(b);
fooList.add(c);
System.out.println(fooList.contains("ID1"));
System.out.println(fooList.contains("ID2"));
System.out.println(fooList.contains("ID5"));
}
public Foo(String id){
this.id = id;
}
@Override
public boolean equals(Object o){
if(o instanceof String){
String toCompare = (String) o;
return id.equals(toCompare);
}
return false;
}
@Override
public int hashCode(){
return 1;
}
}
SALIDA: falsa falsa falsa
que añadió un sencillo código hash, todavía no funciona ... –
@ReidMac: Estaba equivocado, se trata de 'equals()' no ser simétrico, eche un vistazo a mi edición. 'hashCode()' no tiene nada que ver en este caso, pero igual debe seguir este principio –
Es extraño que necesitemos usar esta 'nueva convención Foo (" ID1 ");' para usar el método personalizado igual. ¿Alguna razón detrás de esto? – Dish