Лучший способ найти индекс элемента в ArrayList? - PullRequest
77 голосов
/ 09 декабря 2011

Для приложения 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 есть причудливая нативная функция, которую я должен использовать?

Ответы [ 5 ]

176 голосов
/ 09 декабря 2011

ArrayList имеет метод indexOf() .Проверьте API, чтобы узнать больше, но вот как это работает:

private ArrayList<String> _categories; // Initialize all this stuff

private int getCategoryPos(String category) {
  return _categories.indexOf(category);
}

indexOf() вернет именно то, что возвращает ваш метод, быстро.

14 голосов
/ 19 мая 2015
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.

Выполнено

6 голосов
/ 09 декабря 2011

Если ваш List отсортирован и имеет хороший произвольный доступ (как это делает ArrayList), вы должны посмотреть на Collections.binarySearch.В противном случае вы должны использовать List.indexOf, как указали другие.

Но ваш алгоритм здравый, не так как (== другие указали).

3 голосов
/ 09 декабря 2011

В Java действительно есть причудливая нативная функция shmancy, которую вы должны использовать.

ArrayList имеет метод экземпляра с именем

indexOf(Object o)

(http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html)

Вы можете вызвать его на _categories следующим образом:

_categories.indexOf("camels")

У меня нет опыта программирования на Android - но это будет работать для стандартного приложения Java.

Удачи.

2 голосов
/ 09 декабря 2011

Java API определяет два метода, которые вы можете использовать: indexOf(Object obj) и lastIndexOf(Object obj).Первый возвращает индекс элемента, если он найден, -1 в противном случае.Второй возвращает последний индекс, который будет похож на поиск по списку в обратном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...