我想知道如何实现ArrayList的方法indexOf.实际上我已经覆盖了equals方法,如下所示:
public class CustomObject {
@Override
public boolean equals(Object o) {
if(o instanceof CityLoader)
return ((CityLoader)o).getName() == this.name;
else if (o instanceof String)
return this.name.equals((String)o);
return false;
}
}
我虽然这会避免我覆盖indexOf方法,但似乎我完全错了.
当我尝试
ArrayList customObjects = new ArrayList
... insert customobject into the arraylist ...
customObjects.indexOf(new String("name"))
indexOf返回false但它应该返回true. (我检查了我要找的元素存在)
我完全错了吗?
解决方法:
当比较的对象不是同一类型时,equals永远不会返回true(在你的情况下,当o不是CustomObject的实例时,CustomObject的equals应该总是返回false).
当你向它传递一个String时,indexOf的实现恰好使用String的equals而不是你的CustomObject的equals,而当你传递一个不是String的对象时,String的equals返回false.
另外,在比较字符串时不要使用==.
您应该将CustomObject的实例传递给indexOf:
customObjects.indexOf(new CustomObject("name"))
(或者任何CustomObject的构造函数看起来像)
你的equals方法应如下所示:
public boolean equals(Object o) {
if(!(o instanceof CityLoader))
return false;
CityLoader other = (CityLoader)o;
return other.name.equals(this.name);
}
标签:indexof,java,equals,override
来源: https://codeday.me/bug/20190824/1704556.html