我尝试了下面的简单测试。
class ZiggyTest{
public static void main(String[] args){
List<Cities> cities3 = new ArrayList<Cities>();
Cities city = new Cities("London");
cities3.add(new Cities("Manchester"));
cities3.add(new Cities("Glasgow"));
cities3.add(new Cities("Leeds"));
cities3.add(city);
cities3.add(new Cities("Leicester"));
cities3.add(new Cities("Croydon"));
cities3.add(new Cities("Watford"));
System.out.println("IndexOf(new Croydon) "
+ cities3.indexOf(new Cities("Croydon")));
System.out.println("IndexOf(city) "
+ cities3.indexOf(city));
}
}
class Cities implements Comparable<Cities>{
String title;
Cities(String aTitle){
this.title = aTitle;
}
public String getTitle(){
return title;
}
public String toString(){
return "Title : " + title;
}
public int compareTo(Cities c){
return title.compareTo(c.getTitle());
}
}上述测试的输出是
IndexOf(new Croydon) -1
IndexOf(city) 3我理解为什么第二行产生了3,但我不明白为什么第一行没有找到带有title="Croydon“的新行。
API将indexOf方法描述为
返回此列表中指定元素的第一个匹配项的索引,如果此列表不包含该元素,则返回-1。更正式地说,返回最低索引i,这样的
(o==null ? get(i)==null : o.equals(get(i))),或-1,如果没有这样的索引。
我认为API的意思是,如果对象是空的,那么它将从列表中返回空对象第一次出现的索引。如果它不是null,它将返回第一个事件的索引,其中传入的object方法返回true。
作为cities3.indexOf(new Cities("Croydon")创建的对象不应该等于先前作为cities3.add(new Cities("Croydon"));添加的对象吗?
发布于 2011-10-30 13:17:10
如果要执行搜索操作,请重新定义equals而不是compareTo。
默认情况下,indexOf使用等于操作进行比较,在您的情况下,等于不重新定义,这意味着您可以通过引用进行比较。创建具有相同名称的新City对象时,对对象有另一个引用,因此等于返回false。
如果你使用的是描述城市的对象,最好的名字是“类城市”,而不是“城市”
发布于 2021-03-06 23:38:45
在SWIFT5.3中,如果对象继承自NSObject,则需要这样做:
方法名为"isEqual“
public override func isEqual(_ object: Any?) -> Bool {
if let myObj = object as? MyObj {
return myObj.someProperty == self.someProperty
}
return false
}https://stackoverflow.com/questions/7945089
复制相似问题