我嘗試了下面的簡單測試。使用與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