У меня возникает проблема, когда я создаю объект ArrayList из объектов Foo, я переопределяю метод equals, и я не могу получить метод contains для вызова метода equals. Я попробовал переопределить равные и хэш-коды вместе, но он все равно не работает. Я уверен, что есть логическое объяснение, почему это так, но я не могу понять это сейчас на моем собственном lol. Я просто хочу, чтобы увидеть, содержит ли список указанный идентификатор.
Вот код:
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;
}
}
ВЫВОД: ложный ложный ложь