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 ? e==null : 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 как глобальную, вы можете получить доступ к ее значению вне этого блока кода.:)
Ответ 4
используйте метод index для получения позиции -
listPackages.indexOf(current_package)
http://download.oracle.com/javase/1.4.2/docs/api/java/util/ArrayList.html#indexOf(java.lang.Object)