Iterator 的 next() 必须配合 hasNext() 使用,否则末尾调用会抛出 NoSuchElementException;next() 单向移动游标并返回元素,不可倒退;remove() 仅能删除上一次 next() 返回的元素。

Java 中的 Iterator 通过 next() 方法获取集合中下一个元素,但必须先调用 hasNext() 判断是否还有元素,否则可能抛出 NoSuchElementException。
必须配合 hasNext() 使用
next() 不会自动检查是否有下一个元素,它只是“取”,而 hasNext() 负责“问”。跳过 hasNext() 直接调用 next() 在遍历末尾会触发异常。
- 正确写法:
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String item = it.next(); // 安全:hasNext 已确保有元素
System.out.println(item);
}
next() 的行为特点
next() 每次调用都会将内部游标前移一位,并返回当前指向的元素。连续两次调用 next() 会得到两个不同元素(如果有)。
- 第一次调用
next()返回第一个元素,游标移到第二个位置 - 第二次调用返回第二个元素,游标移到第三个位置
- 游标始终指向“下一个待取元素”的位置,初始时在第一个元素之前
不能倒退或重复获取
Iterator 是单向、只进不退的。一旦调用 next(),就无法回到上一个元素,也不能再次用同一个 next() 取到刚取过的值。
立即学习“Java免费学习笔记(深入)”;
- 没有
previous()或peek()方法(ListIterator除外) - 如果需要重复访问,应把
next()返回的值存入变量再多次使用
注意 remove() 和 next() 的关系
remove() 只能删除刚刚由 next() 返回的那个元素,且每个 next() 最多对应一次 remove()。
- 调用
remove()前必须至少调用过一次next() - 连续两次
remove()会抛出IllegalStateException


















