有没有办法获取列表的元素ID以便稍后获取它 list.get(index)
使用时
for(Object obj: o)
Run Code Online (Sandbox Code Playgroud)
施工
只定义一个局部变量并手动递增它?还有什么更简单的吗?
不,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,set和remove操作.
List就迭代机制而言,这是数组的另一个明显优势.
简单回答是不.
我能想到的最好的方法是将迭代和索引结合起来,如下所示:
int idx = 0;
for (Iterator<Object> it = list.iterator(); it.hasNext(); idx++) {
Object o = it.next();
// ...
}
Run Code Online (Sandbox Code Playgroud)
这种方法的优点是break和continue不会弄乱的idx计算.
另一方面,如果list是a ArrayList并且您想要跟踪索引,那么最好只使用变体
for (idx = 0; idx < list.size(); idx++) {
Object o = list.get(idx);
// ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42686 次 |
| 最近记录: |