Я попробовал следующий простой тест.
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 описывает метод indexOf
как метод, который
Возвращает индекс первого вхождения указанного элемента в этом списке или -1, если этот список не содержитэлемент.Более формально, возвращает самый низкий индекс i, такой что (o==null ? get(i)==null : o.equals(get(i)))
или -1
, если такого индекса нет.
Я думаю, что API говорит, что если объект является нулевым, то он вернет индекс первого появления нулевого объекта из списка.Если он не равен NULL, он вернет индекс первого вхождения, где переданный в объект метод equals возвращает true.
Разве объект, созданный как cities3.indexOf(new Cities("Croydon")
, не должен быть равен объекту, добавленному ранее как cities3.add(new Cities("Croydon"));
?