我尝试了下面的简单测试。使用与indexOf类似的工具
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,但我不理解为什么第一行没有找到新的具有标题=”克罗伊登”。
的API描述为一个
返回指定元件的第一次出现的索引在此列表中,或-1,如果该列表不包含该元素的
indexOf
方法。更正式地说,如果没有这样的索引,则返回最低索引i,即(o==null ? get(i)==null : o.equals(get(i)))
或-1
。
我认为API是说如果对象为null,那么它将返回列表中第一个出现空对象的索引。如果它不为null,它将返回传入的对象等于方法返回true的第一次出现的索引。
不应该创建为cities3.indexOf(new Cities("Croydon")
的对象是否等于之前添加的对象cities3.add(new Cities("Croydon"));
?
也许这是Java想忘记克罗伊登的愿望?真的不能指责它......(请参阅mishadoff对于真正的解决方案的回答,但作为一个老惠特吉,我无法抗拒......) –
哈哈很有趣:) – ziggy