获取迭代ArrayList的每个循环的当前索引

Ich*_*aki 22 java indexing foreach arraylist

我正在ArrayList使用for循环迭代,但我不知道如何获取循环所在的当前索引.

我做谷歌,但我找不到任何有用的东西.

如果有人能告诉我如何获得当前指数,我将不胜感激.

Doo*_*nob 38

只需使用传统的for循环:

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

  • “i”用于总结算法中的“index”一词,字母表后面的“j”和“k”。 (2认同)

Zak*_*Zak 10

窃取门把手答案,但做出改变,否则会像海盗一样让我疯狂:

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

或者

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

    currentPosition++;
}
Run Code Online (Sandbox Code Playgroud)

  • 为什么这会让你发疯?你的改变会让我发疯! (2认同)
  • 如果您正在为Android编码,那么文档强烈建议使用@ Zak这样做的方法,以避免重复的函数调用.如果更改循环内列表的大小,可以根据需要使用`arraySize = yourArrayList.size()`或使用`++`或`--`. (2认同)
  • @assylias - 在编程语言,编译器和平台之间,不清楚哪些编译器/ VM可以优化来自for循环内部的重复函数调用.此外,代码不是以显示不重复进行该函数调用的意图的方式编写的.这就是为什么它让我疯了,为什么我把函数调用单独放在一行上所以我可以在语义上告诉我的意图,编译器没有优化猜测. (2认同)
  • 我认为这个问题更加微妙.如果列表在循环期间永远不会改变大小,则无需重复调用size方法.如果重复调用大小也可以被VM优化掉,我会感到惊讶,因为它必须证明在循环期间列表不会发生任何修改(引用计数可能?).我一会儿测试了这个,重复的调用没有被优化掉,也许现在是.我使用`for(int i = 0,n = list.size(); i <n; i ++)`来获得一条善良. (2认同)

Oma*_*man 7

您可以使用它list.indexOf(objectYouWantToFind);来获取索引,如果它在容器中,您将收到其他-1结果.

  • @robel与`indexOf`的问题是性能之一.`indexOf`每次调用时都会对所有元素进行线性扫描,而@ Doorknob使用显式for循环的答案可以避免额外的扫描.例如,如果您每次迭代循环并调用indexOf,那么您有O(n ^ 2).如果你认为`get`为O(1),Doorknob的答案是O(n).您可能会对此链接感兴趣:http://java-performance.info/arraylist-performance/ (3认同)