List.contains()在equals()的情况下失败。 注意:此翻译不包含HTML标签和引号或双引号内的内容。

11 浏览
0 Comments

List.contains()在equals()的情况下失败。 注意:此翻译不包含HTML标签和引号或双引号内的内容。

我有一个使用字符串作为等价检查的Test对象的ArrayList。我想要使用List.contains()来检查列表是否包含使用特定字符串的对象。

简单来说:

Test a = new Test("a");
a.equals("a"); // True
List test = new ArrayList();
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,这对我来说非常奇怪。

我应该如何使它工作?

0