По моему скромному мнению, они допустили одну глупую ошибку в классах коллекций Java, которая усложняет проблему. Когда вы делаете Collection.indexOf (want), они выполняют поиск в коллекции, говоря, в основном «if (want.equals (collectionMember))», а не «if (collectionMember.equals (want))».
Я думаю, что последнее было бы лучше, потому что это позволило бы вам просто написать функцию «MyObject.equals (String)» или «MyObject.equals (Integer)», то есть сравнить ваш пользовательский объект с общим объектом. , Тогда вы могли бы реализовать это как, скажем ...
public boolean equals(String wantname)
{
return this.name.equals(wantname);
}
Но поскольку он на самом деле реализован как "if (want.equals (collectionMember))", конечно, класс Java String не имеет функции "equals (MyObject)", поэтому вы не можете просто дать ему строку искать. Вместо этого вам нужно создать фиктивный объект для хранения значения, которое вы хотите найти.
Да, как указывали другие авторы, не составляет особого труда написать быструю функцию для последовательного поиска в коллекции. Но что, если мы говорим о коллекции, в которой последовательный поиск не практичен и не эффективен, например, HashMap или древовидная структура?