hasnext()用于判断iterator是否还有下一个元素:返回true可安全调用next(),false则遍历完毕;它不移动指针,仅探查,须与next()配合使用,首次调用判断第0个元素是否存在。

用 hasNext() 方法判断 Iterator 中是否还有下一个元素。
hasNext() 是标准判断方式
这是 Iterator 接口定义的核心方法,专门用于检测迭代器当前位置之后是否还存在未访问的元素:
- 返回 true:表示还有下一个元素可取,可以安全调用 next()
- 返回 false:表示已遍历完全部元素,再调用 next() 会抛出
NoSuchElementException - 该方法不移动内部指针,只做“探查”,因此可多次调用而不影响状态
必须配合 next() 按顺序使用
hasNext() 的设计意图就是为 next() 提供前置保护。实际遍历时不能跳过它直接取元素:
- 错误写法:
iterator.next()前没检查 hasNext() → 运行时异常风险高 - 正确结构:
while (it.hasNext()) { String s = it.next(); ... } - 即使只取一个元素,也应先
if (it.hasNext()) { it.next(); }
注意指针初始位置和边界行为
Iterator 创建后,指针默认位于第一个元素“之前”(索引 -1 位置):
- 首次调用 hasNext() 判断的是第 0 个元素是否存在
- 每次 next() 执行后,指针自动后移一位,指向下一个待检位置
- 当指针移到末尾(即最后一个元素之后),hasNext() 立即返回 false
remove() 不影响 hasNext() 判断逻辑
调用 remove() 仅删除上一次 next() 返回的那个元素,不影响后续 hasNext() 对“剩余元素是否存在”的判断:
- remove() 必须在 next() 之后调用,否则抛
IllegalStateException - 它不改变指针位置,也不改变 hasNext() 的返回结果逻辑
- 删除操作本身不触发重新计算“是否有下一个”,只是修改集合内容
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











