Java基础教程(九十)集合之使用Iterator:解剖 Java Iterator,解锁集合遍历的隐秘力量

Java Iterator:解锁集合遍历力量

一、Iterator 的本质:解耦遍历与结构

作为迭代器模式的核心实现,Java Iterator 接口 (java.util.Iterator) 将遍历逻辑底层数据结构分离。集合只需暴露 iterator() 方法,无需关心调用方如何遍历元素。

核心方法:
  1. boolean hasNext():检查是否还有元素
  2. E next():返回下一元素(指针后移)
  3. void remove():删除最后访问的元素(可选实现)
// 基础遍历示例
List<String> fruits = Arrays.asList("Apple", "Banana", "Orange");
Iterator<String> iter = fruits.iterator();

while (iter.hasNext()) {
    String fruit = iter.next(); // 获取当前元素并移动指针
    System.out.println(fruit);
}

二、为何选择 Iterator?关键优势解析

  1. 统一访问接口:无论 ArrayListHashSet 或自定义集合,调用 iterator() 即可用相同方式遍历。
  2. 安全删除元素for 循环中直接删除易引发 ConcurrentModificationException 或逻辑错误,Iterator.remove() 是安全方案:
// 安全删除示例:移除所有 "Banana"
Iterator<String> iter = fruits.iterator();
while (iter.hasNext()) {
    if ("Banana".equals(iter.next())) {
        iter.remove(); // ✅ 安全操作
    }
}
  1. Fail-Fast 保护:多数集合的迭代器检测并发修改。遍历中若集合被其他线程(或自身非迭代器操作)修改,立即抛出 ConcurrentModificationException
List<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3));
Iterator<Integer> iter = numbers.iterator();
iter.next(); // 指向1
numbers.add(4); // 修改原始集合
iter.next(); // ❌ 抛出 ConcurrentModificationException

三、实战注意事项

  1. 不可逆性Iterator 单向移动,无法回头或重置(除新建迭代器)。
  2. remove() 前置条件:必须在 next() 后调用,且一次 next() 仅能调用一次 remove()
  3. 并发场景:需用 ConcurrentHashMapCopyOnWriteArrayList 等线程安全容器的迭代器。

结语:优雅遍历的基石

Iterator 不仅是遍历工具,更是设计模式思想的典范。它通过最小化耦合,赋予开发者安全、灵活操作集合的能力。掌握其原理与技巧,能有效规避并发陷阱,写出更健壮的 Java 代码。在 forEach 和 Stream API 盛行的今天,理解迭代器底层逻辑仍是进阶之路的关键一步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值