Java - получить позицию элемента в массиве

Я знаком с тем, как я могу получить позицию элемента в массиве, особенно те, которые показаны здесь: Позиция элемента в массиве

Но моя проблема в том, что я не могу понять, как преобразовать этот код в соответствии с моими потребностями.

То, что я хочу проверить, - это если строка имеет совпадение в ArrayList, и если да, то какой индекс String в ArrayList.

Досадной части мне удалось проверить, что String находится в ArrayList (см. первую строку моего кода)

listPackages - это ArrayList

current_package - это строка, которую я хочу найти в списке.

Здесь мой код:

if (listPackages.contains(current_package)) {

        int position = -1;
        for(int j = 0; j < listPackages.size(); j++) {

            if(listPackages[j] == current_package) {
              position = j;
                  break;
              }
            }
    }

Поблагодарили бы за любую помощь!

Спасибо!

Ответы

Ответ 1

Используйте indexOf:

int index = listPackages.indexOf(current_package);

Обратите внимание, что вы не должны обычно использовать == для сравнения строк, которые будут сравнивать ссылки, т.е. являются ли эти два значения ссылками на один и тот же объект, а не на равные строки. Вместо этого вы должны вызвать equals(). Вероятно, что-то не так с вашим существующим кодом, но, очевидно, использование indexOf намного проще.

Ответ 2

просто используйте вызов listPackages.indexOf(current_package);

ArrayList.contains(Object o) вызывает indexOf(Object o) внутренне в ArrayList:

/**
 * Returns <tt>true</tt> if this list contains the specified element.
 * More formally, returns <tt>true</tt> if and only if this list contains
 * at least one element <tt>e</tt> such that
 * <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>.
 *
 * @param o element whose presence in this list is to be tested
 * @return <tt>true</tt> if this list contains the specified element
 */
public boolean contains(Object o) {
return indexOf(o) >= 0;
}

Ответ 3

Надеюсь, это поможет вам. Изменить свой код следующим образом:

if (listPackages.contains(current_package)){
int position=listPackages.indexOf(current_package);
}

Также, если вы сделаете переменную position global как глобальную, вы можете получить доступ к ее значению вне этого блока кода.:)