在Java中多次对同一集合使用迭代器

问题描述

| 假设我要遍历Java中的一个集合,例如
Iterator<_someObject_> it = _someObject_.iterator();
好吧,首先,我想遍历集合中的每个对象,并对我访问的每个对象进行更改。所以我用:
while(it.hasNext()) {
        _someObject_ = it.next();
        _someObject_.add3();       //made up method
    }
既然我已经做到了,我决定我想从头到尾再次遍历整个集合,以对它们执行另一种方法,因为我刚刚在第一次迭代中对每个元素进行了更改。 我可以用吗
while(it.hasNext())
再次? 我以为迭代器可能有一个指针,所以一旦它到达第一个游程的最后一个元素,如果我再次调用
while(it.hasNext())
,该指针仍将位于集合的末尾,这意味着我的第二个while循环将毫无意义。     

解决方法

不,您不能这样做。只需向Iterable对象请求另一个迭代器即可。     ,抱歉,an4ѭ的合同规定您只能经历一次。 鉴于您无法确定下一个Iterator的顺序,甚至无法确定相关内容(它可能会更改!),因此最好在同一块中进行所有修改或方法调用。     ,迭代器仅供一次性使用。     ,我猜您已经发现Iterator没有\“ reset \\”的方法...所以您只需抓住另一个ANATOR。简单。     ,循环后的“ 5”为假,这正是while循环结束的原因。如果之后再执行另一个
while(it.hasNext())
,则
it.hasNext()
仍然为假,因此该循环将立即退出。您需要为新循环使用新的迭代器。     ,的确,迭代器仅是一次性的,但是有一个名为
ListIterator
的类,它使您可以通过查看列表来实现此目的。一个例子是:
ArrayList<String> list = new ArrayList<String>();
list.add(\"hey!\");
list.add(\"how\");
list.add(\"are\");
list.add(\"you?\");
ListIterator it = list.listIterator();
while(it.hasNext()){
   System.out.println(it.next() +\" \");//you print all the elements
}
//Now you go back. You can encapsulate this while sentence into a void reset method.
while(it.hasPrevious()){
   it.previous();
}
//Now you check that you\'ve reached the beginning of the list
while(it.hasNext()){
   System.out.println(\"back \" + it.next() +\" \");//you print all the elements
}
我认为这对您上课可能有用。