使用Iterator时如何获取当前循环索引?

Mah*_*leh 93 java iterator

我正在使用迭代器迭代一个集合,我想得到当前元素的索引.

我怎样才能做到这一点?

小智 99

我有同样的问题,发现使用ListIterator工作.与上面的测试类似:

List<String> list = Arrays.asList("zero", "one", "two");

ListIterator iter = list.listIterator();

while (iter.hasNext()) {
    System.out.println("index: " + iter.nextIndex() + " value: " + iter.next());
}
Run Code Online (Sandbox Code Playgroud)

确保在实际获得next()之前调用nextIndex.

  • 感谢您提及'确保在实际获得下一个()之前调用nextIndex (4认同)

Chr*_*ver 87

使用您自己的变量并在循环中递增它.

  • 但也请参阅@ mateusz-dymczyk关于`it.nextIndex()`的建议.当集合是List时很有用. (4认同)

Tom*_*ift 28

这是使用自己的变量并保持简洁的方法:

List<String> list = Arrays.asList("zero", "one", "two");

int i = 0;
for (Iterator<String> it = list.iterator(); it.hasNext(); i++) {
    String s = it.next();
    System.out.println(i + ": " + s);
}
Run Code Online (Sandbox Code Playgroud)

输出(你猜对了):

0: zero
1: one
2: two
Run Code Online (Sandbox Code Playgroud)

优点是你不要在循环中递增索引(尽管你需要注意每个循环只调用Iterator#next - 只需在顶部执行).

  • 如果您自己创建迭代器,您也可以使用ListIterator,并且不需要单独的int变量. (3认同)

Rob*_*mme 20

你可以ListIterator用来做计数:

final List<String> list = Arrays.asList("zero", "one", "two", "three");

for (final ListIterator<String> it = list.listIterator(); it.hasNext();) {
    final String s = it.next();
    System.out.println(it.previousIndex() + ": " + s);
}
Run Code Online (Sandbox Code Playgroud)


Mat*_*zyk 10

什么样的收藏?如果它是List接口的实现,那么你可以使用it.nextIndex() - 1.