Есть ли способ заставить идентификатор элемента списка получить его позже через list.get(index)
при использовании
for(Object obj: o)
конструкция
Только определите локальный var и вручную постепенное увеличение его? Что-либо более простое?
Нет, для каждого цикла
не отслеживает индекс. Вы можете использовать обычный индексированный цикл или сделать что-то вроде этого:
int idx = 0;
for (Object o : list) {
...
idx++;
}
Это рискованно, поскольку break
/ continue
заставит idx
выйти из синхронизации. , поэтому используйте его нечасто и только тогда, когда тело является простым и состоит всего из нескольких строк.
Если элементы различны, List.indexOf
также будет работать, хотя и в O (N)
, и в этот момент вы можете рассмотреть вариант Set
(неупорядоченный, но гарантированно отличный).
Следует также сказать, что иногда использование listIterator ()
также устраняет необходимость в явном индексе во время итерации.
ListIterator
поддерживает операции добавить
, установить
и удалить
.
Это еще одно явное преимущество List
перед массивами в том, что касается механизма итерации.
Простой ответ - нет.
Лучшее, что я могу придумать, - это объединить итерацию и индексацию следующим образом:
int idx = 0;
for (Iterator<Object> it = list.iterator(); it.hasNext(); idx++) {
Object o = it.next();
// ...
}
Этот подход имеет то преимущество, что break
и continue
не испортят вычисления idx
.
С другой стороны, если список
является ArrayList
, и вы хотите отслеживать индекс, вам, вероятно, лучше просто использовать вариант
for (idx = 0; idx < list.size(); idx++) {
Object o = list.get(idx);
// ...
}
Вам нужно использовать:
list.indexOf(o);
Документация находится здесь
@Eugene Я вижу, что вы упомянули в комментарии к другому ответу, что планируете хранить индекс объекта (в самом объекте?), это, вероятно, не очень хорошая идея, будьте очень осторожны, поскольку индекс объекта может измениться.
Этот вопрос сформулирован не очень хорошо , но насколько я могу судить, вы хотели бы найти положение определенного объекта
в List
, а затем получить его позже по этому индексу?
Сначала в общем, если вам известен объект
, который вы ищете, вам не нужно искать его в списке
, поскольку он у вас уже есть.
Тем не менее, вы можете легко сделать что-то вроде этого:
int index = -1;
for (int i = 0; i < list.size(); i++) {
if (list.get(i).equals(myObject)) {
index = i;
break;
}
}
Но я бы еще раз взглянул на ваше приложение, чтобы определить, действительно ли это то, что вам необходимо сделать.