java中迭代器与while循环配合是遍历集合最标准、最安全的方式:先用hasnext()判断,再用next()获取元素;删除元素只能用it.remove();map需通过keyset()、values()或entryset()获取迭代器;迭代器不可复位,多线程需加锁或使用线程安全集合。

Java 中迭代器与 while 循环的配合是遍历集合最标准、最安全的方式。核心在于用 hasNext() 控制循环条件,用 next() 获取元素,两者必须成对出现。
标准写法:先检查,再取值
迭代器初始位置在第一个元素之前,hasNext() 只探路不移动指针,next() 才真正前进并返回当前元素。所以必须先调用 hasNext() 判断,再调用 next() 取值,否则会抛 NoSuchElementException。
Iterator<string> it = list.iterator();</string>while (it.hasNext()) {-
String s = it.next(); // 此时才移动指针并拿到元素 -
System.out.println(s); }
安全删除元素:只能用 it.remove()
遍历时想删元素,绝不能调用 list.remove(),必须用迭代器自己的 remove() 方法。它会同步更新内部状态,避免 ConcurrentModificationException。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 每次
next()后最多调用一次remove() - 不能在
hasNext()前或连续两次调用remove() - 删除后指针位置不变,下一轮仍从下一个元素开始
遍历 Map 要通过视图获取 Iterator
Map 本身不实现 Iterable,不能直接用 for-each 或 iterator()。需选择键、值或条目视图:
-
map.keySet().iterator()—— 遍历 key -
map.values().iterator()—— 遍历 value -
map.entrySet().iterator()—— 遍历Map.Entry<k></k>,可同时访问 key 和 value
注意迭代器不可复位
一个迭代器遍历完就失效了,不会自动回到开头。需要重新遍历,必须再次调用 collection.iterator() 获取新实例。
- 不能对同一个迭代器对象反复 while 循环
- 多线程环境下,必须加锁或改用
ConcurrentHashMap等线程安全集合
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










