一、什么是iterator
iterator(迭代器)是 java 集合框架中用于遍历集合元素的接口,它是一个"指针"或"游标",用于逐个访问集合中的元素,而无需关心集合的内部结构。
二、iterator的核心方法
方法 | 作用 | 使用频率 |
---|---|---|
boolean hasnext() | 判断是否还有下一个元素 | 高 |
e next() | 返回下一个元素并移动指针 | 高 |
void remove() | 删除当前元素(最近一次 next() 返回的元素) | 中 |
default void foreachremaining(consumer<? super e> action) | java 8+,对剩余元素执行操作 | 中 |
三、基本使用示例
遍历 list
list<string> list = arrays.aslist("a", "b", "c"); iterator<string> iterator = list.iterator(); while (iterator.hasnext()) { string element = iterator.next(); system.out.println(element); }
四、iterator的工作原理
iterator 内部维护一个指针(cursor),初始指向集合的第一个元素之前:
- 调用
hasnext()
检查是否还有元素 - 调用
next()
返回当前元素并移动指针 - 遍历结束时
hasnext()
返回 false
五、使用注意事项
1、避免并发修改异常
// 错误做法:直接使用集合的remove方法 for (string s : list) { if (s.equals("b")) { list.remove(s); // 会抛出concurrentmodificationexception } } // 正确做法:使用iterator的remove方法 iterator<string> iterator = list.iterator(); while (iterator.hasnext()) { string s = iterator.next(); if ("b".equals(s)) { iterator.remove(); // 安全删除 } }
2、remove()必须在next()之后调用
必须先调用next()
获取元素,然后才能调用remove()
删除该元素。
3、一个next()对应一个remove()
不能连续调用两次remove()
,每次调用next()
后只能调用一次remove()
。
六、iterator vs增强for循环
对比项 | iterator | 增强 for 循环 |
---|---|---|
语法 | 手动写 while 循环 | for (t t : collection) |
删除元素 | 支持(用 iterator.remove() ) | 不支持(会抛异常) |
灵活性 | 高(可控制流程) | 低(只用于遍历) |
底层实现 | 直接使用 iterator | 编译后转换为 iterator |
选择建议:只需遍历时用增强 for,需要删除元素时用 iterator。
七、适用集合类型
iterator 可用于所有实现 iterable
接口的集合:
- list(arraylist, linkedlist)
- set(hashset, treeset)
- queue
- map 的
keyset()
、values()
、entryset()
八、java8+替代方案
1.foreach+lambda
list.foreach(system.out::println);
2.stream api
list.stream() .filter(s -> !s.equals("b")) .foreach(system.out::println);
现代java开发推荐使用这些更简洁的函数式编程方式。
九、iterator设计模式
iterator是"迭代器模式"的经典实现,其核心思想是将遍历逻辑与集合分离,降低耦合度,让用户无需了解集合内部结构。
十、总结
关键点 | 说明 |
---|---|
作用 | 遍历集合元素 |
核心方法 | hasnext() , next() , remove() |
删除元素 | 必须使用 iterator.remove() |
并发修改 | 直接调用集合的 remove/add 会抛异常 |
增强 for 底层 | 基于 iterator 实现 |
现代替代 | foreach() , stream api |
口诀:"遍历用 foreach,删除用 iterator"
iterator 是 java 集合框架的基础,理解其原理和正确使用方式对于java开发者至关重要。
以上就是java集合之iterator迭代器实现代码解析的详细内容,更多关于java iterator迭代器的资料请关注代码网其它相关文章!
发表评论