我正在使用Iterator来遍历一个集合,我想获取当前元素的索引。
我怎样才能做到这一点?
我正在使用Iterator来遍历一个集合,我想获取当前元素的索引。
我怎样才能做到这一点?
Answers:
我有同样的问题,发现使用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());
}
确保在实际获得next()之前调用nextIndex。
这是使用您自己的变量并保持简洁的一种方法:
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);
}
输出(您猜对了):
0: zero
1: one
2: two
优点是您不必在循环内增加索引(尽管您需要注意每个循环仅调用Iterator#next一次-只需在顶部执行即可)。
asList("zero", "one", "two")
什么样的收藏?如果是List接口的实现,则可以使用it.nextIndex() - 1
。
使用ListIterator遍历Collection。如果Collection不是以List开头的列表Arrays.asList(Collection.toArray())
,请先将其转换为List。
使用int并将其在循环中递增。
您只需使用iterator.nextIndex()即可返回迭代器所在的当前索引。这可能比使用您自己的计数器变量(仍然可以使用)容易一些。
public static void main(String[] args) {
String[] str1 = {"list item 1", "list item 2", "list item 3", "list item 4"};
List<String> list1 = new ArrayList<String>(Arrays.asList(str1));
ListIterator<String> it = list1.listIterator();
int x = 0;
//The iterator.nextIndex() will return the index for you.
while(it.hasNext()){
int i = it.nextIndex();
System.out.println(it.next() + " is at index" + i);
}
}
此代码将一次遍历list1列表中的一项,并打印该项的文本,然后“在索引处”,然后将打印迭代器在其处找到的索引。:)
尽管您已经有了答案,但请考虑添加一些信息。
正如您明确提到集合的那样,您不能使用它listIterator
来获取所有类型的集合的索引。
列表接口 -ArrayList,LinkedList,Vector和Stack。
既有iterator()
和listIterator()
设置接口 -HashSet,LinkedHashSet,TreeSet和EnumSet。
只有 iterator()
地图接口 -HashMap,LinkedHashMap,TreeMap和IdentityHashMap
没有迭代器,但可以使用通过keySet()
/ values()
或entrySet()
as 进行迭代,keySet()
并entrySet()
返回Set
和values()
return Collection
。
因此,最好将其iterators()
与值的连续递增结合使用以获取任何集合类型的当前索引。