java的迭代器如何重复使用,比如将一个list正序迭代一次后,再逆序迭代一次?
时间: 2024-09-25 13:18:37 浏览: 46
Java的Iterator设计允许你在遍历集合元素后仍然可以继续使用,只要你没有移除所有的元素,并且它实现了`hasNext()`和`next()`方法。对于列表(List)来说,虽然List本身没有直接提供逆序迭代的功能,但是你可以通过创建一个新的Iterator并调整其遍历顺序来实现。
以下是一个简单的例子,假设我们有一个List:
```java
import java.util.*;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
// 正序迭代
Iterator<Integer> iterator1 = list.iterator();
while (iterator1.hasNext()) {
System.out.println(iterator1.next());
}
// 保存下一个将要被返回的元素
Integer nextElement = null;
if (iterator1.hasNext()) {
nextElement = iterator1.next(); // 跳过最后一个元素,因为我们将逆序遍历
}
// 创建一个新的Iterator,从上一次停止的地方开始逆序遍历
Iterator<Integer> iterator2 = new ArrayList<>(list).iterator(); // 或者用Collections.reverseOrder(list)
while (iterator2.hasNext()) {
System.out.print(nextElement + " "); // 输出逆序的第一个元素
nextElement = iterator2.next(); // 获取下一个元素
}
}
}
```
在这个例子中,我们首先正向遍历列表,然后保存即将被下次`next()`访问的元素。然后,我们创建了一个新的Iterator,从列表的开头开始逆序遍历,同时利用之前保存的元素作为第一个输出。
请注意,如果你需要频繁地改变迭代的方向(如在这段代码中),可能需要考虑使用其他数据结构,如栈或双向链表,它们更方便进行后进先出的操作。
阅读全文