Ответ 1
Просто используйте традиционный для цикла:
for (int i = 0; i < yourArrayList.size(); i ++) {
// i is the index
// yourArrayList.get(i) is the element
}
Я повторяю ArrayList
, используя для каждого цикла, но я не знаю, как получить текущий индекс, где находится цикл.
Я сделал Google это, но я не мог найти ничего полезного.
Пожалуйста, если кто-нибудь скажет мне, как получить текущий индекс, я буду благодарен.
Просто используйте традиционный для цикла:
for (int i = 0; i < yourArrayList.size(); i ++) {
// i is the index
// yourArrayList.get(i) is the element
}
Чтобы украсть дверные ручки, ответьте, но внесите изменения, которые в противном случае могли бы привести меня в орехи, как пират:
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++;
}
Вы можете использовать list.indexOf(objectYouWantToFind);
, чтобы получить свой индекс, если он находится в контейнере, в результате чего вы получите -1
.
Используйте традиционный цикл. Для каждого утверждения в 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 для каждого цикла?.
Если он итерирует список, вы можете использовать метод 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