List.contains() 在 .equals() 工作时失败
我有一个对象,它使用字符串作为等效校验。我希望能够 使用 来检查列表是否包含使用某个字符串的对象。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();
}
我读到这一点,以确保适用于自定义类,它需要重写。因此,对我来说,虽然返回 true,但返回 false,这真是太奇怪了。contains
equals
equals
contains
我怎样才能做到这一点?