Подтвердить что ты не робот

Получить текущий индекс a для каждого цикла, итерации ArrayList

Я повторяю ArrayList, используя для каждого цикла, но я не знаю, как получить текущий индекс, где находится цикл.

Я сделал Google это, но я не мог найти ничего полезного.

Пожалуйста, если кто-нибудь скажет мне, как получить текущий индекс, я буду благодарен.

4b9b3361

Ответ 1

Просто используйте традиционный для цикла:

for (int i = 0; i < yourArrayList.size(); i ++) {
    // i is the index
    // yourArrayList.get(i) is the element
}

Ответ 2

Чтобы украсть дверные ручки, ответьте, но внесите изменения, которые в противном случае могли бы привести меня в орехи, как пират:

int arraySize = yourArrayList.size();
for (int i = 0; i < arraySize; i ++) {
    // i is the index
    // yourArrayList.get(i) is the element
}

в качестве альтернативы

int currentPosition = 0;
for (myItemType myItem :myArrayList) {
    // do stuff

    currentPosition++;
}

Ответ 3

Вы можете использовать list.indexOf(objectYouWantToFind);, чтобы получить свой индекс, если он находится в контейнере, в результате чего вы получите -1.

Ответ 4

Используйте традиционный цикл. Для каждого утверждения в java не обещают порядок над коллекцией. Единственный способ узнать индекс - это запросить список на каждой итерации.

for(int i=0; i<list.size; i++){
    // you have your index, i
    // the item is at list.get(i)
}

Полагаясь на реализацию итератора(), вы также можете использовать альтернативу (+1 Zak в комментариях):

int position = 0;
for(Item i : list){

    // do stuff with `i`

    // increase position as the last action in the loop
    position++;
}

Из документов: Iterator<E> iterator() Returns an iterator over the elements in this list in proper sequence

Вот почему Я обычно не использую короткую форму for:

import java.util.ArrayList;
import java.util.Iterator;


public class MyList<T> extends ArrayList<T> {
    // the main function to run the example
    public static void main(String[] args){
        // make a list of my special type
        MyList<Integer> list = new MyList<Integer>();

        // add 10 items to it
        for (int i =0; i<10; i++){
            list.add(i);
        }

        // print the list using the for-each mechanism (it actually an iterator...)
        for (Integer i : list){
            System.out.println(i);
        }
    }

    // I like lists that start at 3!
    // make my list return an iterator in the middle of the list...
    @Override
    public Iterator<T> iterator(){
        return this.listIterator(3);

    }

}

Очевидно, что вы ожидаете, что первый элемент на первой итерации, и это явно не так, потому что итератор может быть реализован по-разному, а Java foreach зависит от базовой реализации iterator.

Кроме того, вы должны использовать position++ в конце вашего цикла, который вероятно подвержен ошибкам (не знаю, обычно не используйте его).

Тем не менее, это улучшает читаемость, как упомянуто в этом stackoverflow question о Java foreach.

Для получения дополнительной информации см. Как работает Java для каждого цикла?.

Ответ 5

Если он итерирует список, вы можете использовать метод indexOf(), например:

List<Animal> animals = new ArrayList<Animal>();
Animal a = new Animal();
a.setAnimalCode(1);
animals.add(a);

a = new Animal();
a.setAnimalCode(35);
animals.add(a);

a = new Animal();
a.setAnimalCode(12);
animals.add(a);

for(Animal a: animals)
   if(animal.getAnimalCode()==35)
      System.out.println("Index of chosen one: "+animals.indexOf(a));

Указатель выбранного: 2