for(Object object:list)[java]和index元素

Eug*_*neP 5 java loops list

有没有办法获取列表的元素ID以便稍后获取它 list.get(index)

使用时

for(Object obj: o)
Run Code Online (Sandbox Code Playgroud)

施工

只定义一个局部变量并手动递增它?还有什么更简单的吗?

pol*_*nts 8

不,for-each循环不跟踪索引.您可以使用常规索引循环,也可以执行以下操作:

int idx = 0;
for (Object o : list) {
   ...
   idx++;
}
Run Code Online (Sandbox Code Playgroud)

这是有风险的,因为break/ continue会使idx得不同步,所以不经常使用这种情况,并且只有当身体很简单并且只有几行长时才使用.

如果元素是不同的,List.indexOf也可以工作,虽然在O(N),并且在那时你可能想要考虑Set(无序但有保证的不同).


还应该说,有时使用a listIterator()也减少了迭代时显式索引的需要.

一个ListIterator支架add,setremove操作.

List就迭代机制而言,这是数组的另一个明显优势.


Ste*_*n C 5

简单回答是不.

我能想到的最好的方法是将迭代和索引结合起来,如下所示:

int idx = 0;
for (Iterator<Object> it = list.iterator(); it.hasNext(); idx++) {
    Object o = it.next();
    // ...
}
Run Code Online (Sandbox Code Playgroud)

这种方法的优点是breakcontinue不会弄乱的idx计算.

另一方面,如果list是a ArrayList并且您想要跟踪索引,那么最好只使用变体

for (idx = 0; idx < list.size(); idx++) {
    Object o = list.get(idx);
    // ...
}
Run Code Online (Sandbox Code Playgroud)