У меня есть ArrayList
объектов Test
, которые используют строку в качестве проверки эквивалентности. Я хочу иметь возможность использовать List.contains()
, чтобы проверить, содержит ли список объект, который использует определенную строку.
Просто:
Test a = new Test("a");
a.equals("a"); // True
List<Test> test = new ArrayList<Test>();
test.add(a);
test.contains("a"); // False!
Равные и Хэш-функции:
@Override
public boolean equals(Object o) {
if (o == null) return false;
if (o == this) return true;
if (!(o instanceof Test)) {
return (o instanceof String) && (name.equals(o));
}
Test t = (Test)o;
return name.equals(t.GetName());
}
@Override
public int hashCode() {
return name.hashCode();
}
Я прочитал, что для того, чтобы contains
работал для настраиваемого класса, он должен переопределить equals
. Таким образом, мне очень странно, что в то время как equals
возвращает true, contains
возвращает false.
Как я могу сделать эту работу?