java iterator 遍历监控统计的核心做法是编写一个包装类,在 next() 和 hasnext() 方法中插入逻辑计数器。通过拦截迭代过程,可以实时获取已访问元素的数量、当前索引位置以及是否到达末尾等状态信息,从而实现对遍历行为的精确监控。

Iterator 接口的基本遍历流程是怎样的
Iterator 接口定义了三个核心方法:hasNext() 用于判断是否还有下一个元素,next() 用于获取当前元素并移动指针,remove() 用于删除当前元素。标准的遍历流程是先调用 hasNext() 检查,若为真则调用 next() 获取数据。这种模式确保了安全遍历,避免了并发修改异常(除非显式使用 remove())。

import java.util.Iterator;
import java.util.List;
public class BasicIteratorDemo {
public static void main(String[] args) {
List<string> list = List.of("A", "B", "C");
Iterator<string> it = list.iterator();
int count = 0;
while (it.hasNext()) {
String item = it.next();
System.out.println("Item: " + item);
count++;
}
System.out.println("Total items: " + count);
}
}</string></string>
运行上述代码将输出: Item: A Item: B Item: C Total items: 3
如何自定义 Iterator 实现遍历监控
要实现监控功能,需要创建一个实现了 Iterator 接口的包装类。该类内部持有原始 Iterator 引用,并维护一个 visitedCount 字段。在 next() 方法中,每次成功返回元素前递增计数器;在 hasNext() 方法中仅做判断不改变状态。这样可以在不修改原有业务逻辑的前提下,透明地收集遍历统计数据。

import java.util.Iterator;
import java.util.List;
public class MonitoredIterator<t> implements Iterator<t> {
private final Iterator<t> delegate;
private int visitedCount = 0;
public MonitoredIterator(Iterator<t> delegate) {
this.delegate = delegate;
}
@Override
public boolean hasNext() {
return delegate.hasNext();
}
@Override
public T next() {
if (!hasNext()) throw new java.util.NoSuchElementException();
visitedCount++;
return delegate.next();
}
public int getVisitedCount() {
return visitedCount;
}
}
// 使用示例
List<string> list = List.of("X", "Y");
MonitoredIterator<string> monIt = new MonitoredIterator(list.iterator());
while (monIt.hasNext()) {
monIt.next();
}
System.out.println(monIt.getVisitedCount()); // 输出 2</string></string></t></t></t></t>
该程序验证了监控器能准确记录遍历次数。对于包含两个元素的列表,getVisitedCount() 返回 2,符合预期。
如果遍历中途停止,监控统计会怎样
如果在使用 MonitoredIterator 时提前跳出循环(例如遇到特定条件 break),visitedCount 将只记录实际调用的 next() 次数。这意味着监控结果是“已处理”而非“总容量”。开发者需明确区分“遍历完成”与“部分遍历”的语义,必要时可结合 hasNext() 的最终状态来判断是否完整遍历。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











