Лучший способ найти индекс элемента в ArrayList?
Для Android-приложения у меня есть следующие функции
private ArrayList<String> _categories; // eg ["horses","camels"[,etc]]
private int getCategoryPos(String category) {
for(int i = 0; i < this._categories.size(); ++i) {
if(this._categories.get(i) == category) return i;
}
return -1;
}
Это лучший способ написать функцию для получения позиции элемента? Или есть ли в java встроенная функция shmancy, которую я должен использовать?
Ответы
Ответ 1
ArrayList
имеет метод indexOf()
. Проверьте API еще раз, но вот как это работает:
private ArrayList<String> _categories; // Initialize all this stuff
private int getCategoryPos(String category) {
return _categories.indexOf(category);
}
indexOf()
вернет то, что ваш метод вернет, быстро.
Ответ 2
ArrayList<String> alphabetList = new ArrayList<String>();
alphabetList.add("A"); // 0 index
alphabetList.add("B"); // 1 index
alphabetList.add("C"); // 2 index
alphabetList.add("D"); // 3 index
alphabetList.add("E"); // 4 index
alphabetList.add("F"); // 5 index
alphabetList.add("G"); // 6 index
alphabetList.add("H"); // 7 index
alphabetList.add("I"); // 8 index
int position = -1;
position = alphabetList.indexOf("H");
if (position == -1) {
Log.e(TAG, "Object not found in List");
} else {
Log.i(TAG, "" + position);
}
Вывод: Список индексов: 7
Если вы пройдете H, он вернет 7, если вы пройдете J, он вернет -1 как мы определили значение по умолчанию -1.
Готово
Ответ 3
Если ваш List
отсортирован и имеет хороший произвольный доступ (как это делает ArrayList
), вы должны изучить Collections.binarySearch
. В противном случае вы должны использовать List.indexOf
, как указывали другие.
Но ваш алгоритм звучит, fwiw (кроме указателей ==
).
Ответ 4
В java действительно есть фантастическая функция shmancy, которую вы должны использовать.
ArrayList имеет метод экземпляра под названием
indexOf(Object o)
(http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html)
Вы можете называть его _categories
следующим образом:
_categories.indexOf("camels")
У меня нет опыта программирования на Android, но это будет работать для стандартного приложения Java.
Удачи.
Ответ 5
API Java определяет два метода, которые вы могли бы использовать: indexOf(Object obj)
и lastIndexOf(Object obj)
. Первый возвращает индекс элемента, если он найден, -1 в противном случае. Второй возвращает последний индекс, который будет похож на поиск в списке назад.
Ответ 6
Лучший способ найти позицию элемента в списке - использовать интерфейс Коллекции,
Например,
List sampleList = Arrays.asList(10,45,56,35,6,7);
Collections.binarySearch(sampleList, 56);
Выход: 2