当前位置: 首页 > news >正文

Java 迭代器(Iterator)完全指南:从入门到实战

一、什么是迭代器?

迭代器是 Java 集合框架中的一种设计模式,它的核心作用是:提供一种统一的方式遍历集合中的元素,而不需要暴露集合内部的实现细节

你可以把它想象成一个"游标":

  • 一开始指向集合的第一个元素之前
  • 通过调用方法可以逐个移动游标并获取元素
  • 遍历完成后游标指向集合末尾

二、入门级讲解:基本用法

1. 核心接口定义

Java 中所有迭代器都实现了java.util.Iterator接口,核心方法只有三个:

public interface Iterator<E> { // 判断是否还有下一个元素 boolean hasNext(); // 获取下一个元素(调用前必须先判断hasNext()) E next(); // 删除当前迭代到的元素(可选操作) default void remove() { throw new UnsupportedOperationException("remove"); } }
2. 最简单的遍历示例

以最常用的ArrayList为例,演示基础遍历流程:

import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class IteratorBasicDemo { public static void main(String[] args) { List<String> fruits = new ArrayList<>(); fruits.add("苹果"); fruits.add("香蕉"); fruits.add("橙子"); // 1. 获取迭代器 Iterator<String> iterator = fruits.iterator(); // 2. 遍历集合 while (iterator.hasNext()) { String fruit = iterator.next(); System.out.println("当前水果:" + fruit); // 可选:删除符合条件的元素(注意不能用集合的remove方法) if ("香蕉".equals(fruit)) { iterator.remove(); } } System.out.println("删除香蕉后的集合:" + fruits); } }

运行结果:

当前水果:苹果 当前水果:香蕉 当前水果:橙子 删除香蕉后的集合:[苹果, 橙子]

三、实战进阶:实用场景与避坑指南

1. 遍历中安全删除元素

⚠️关键注意点在迭代过程中,不能直接调用集合的remove()方法,否则会抛出ConcurrentModificationException并发修改异常。必须使用迭代器自身的remove()方法。

错误示例:

// 错误写法:遍历中直接修改集合 for (String fruit : fruits) { if ("香蕉".equals(fruit)) { fruits.remove(fruit); // 会抛出异常 } }
2. 增强 for 循环与迭代器的关系

Java 的增强 for 循环(for-each)本质上是迭代器的语法糖,编译后会自动转换成迭代器遍历:

// 等价于上面的迭代器写法 for (String fruit : fruits) { System.out.println(fruit); }
3. 反向迭代器:ListIterator

对于有序集合(如ArrayList),可以使用ListIterator实现双向遍历

import java.util.ArrayList; import java.util.List; import java.util.ListIterator; public class ListIteratorDemo { public static void main(String[] args) { List<Integer> numbers = new ArrayList<>(); numbers.add(1); numbers.add(2); numbers.add(3); // 获取从末尾开始的迭代器 ListIterator<Integer> iterator = numbers.listIterator(numbers.size()); // 反向遍历 while (iterator.hasPrevious()) { Integer num = iterator.previous(); System.out.println("反向遍历:" + num); } } }

运行结果:

反向遍历:3 反向遍历:2 反向遍历:1
4. 迭代器的应用场景
  • 遍历各种集合(List、Set、Map 的 entrySet/keySet 等)
  • 在遍历中安全删除元素
  • 统一不同集合的遍历方式(不管是 ArrayList 还是 HashSet,都用同样的迭代器接口)

四、优缺点与特点总结

特性详细说明
优点1. 统一遍历接口,无需关心集合内部实现
2. 遍历中安全删除元素
3. 支持单向/双向遍历(ListIterator)
4. 解耦集合与遍历逻辑
缺点1. 只能单向遍历(普通 Iterator),不能随机访问
2. 遍历过程中不能修改集合(除了迭代器自身的 remove 方法
3. 比普通 for 循环(基于索引)的性能略低(对 ArrayList 这类随机访问集合)
🎯核心特点1.迭代器是一次性的:遍历完成后需要重新获取才能再次遍历
2. 快速失败(Fail-Fast)机制:如果在迭代过程中集合被修改,会立即抛出异常

五、类似遍历方式对比

遍历方式适用场景性能可修改性
迭代器 Iterator所有集合类型,需要在遍历中删除元素中等(LinkedList 比索引遍历快)仅支持迭代器的 remove()
增强 for 循环仅需要读取元素,不需要修改与迭代器一致不能修改集合
普通 for 循环(索引)仅支持有序集合(List),需要随机访问对 ArrayList 最快可以直接修改集合,但遍历中删除会导致元素索引混乱
forEach() 方法(Java 8+)函数式编程风格,仅读取元素与迭代器一致不能修改集合(会抛出异常)
对比示例:
// 1. 普通索引遍历(仅适用于List) for (int i = 0; i < fruits.size(); i++) { System.out.println(fruits.get(i)); } // 2. Java 8+ forEach 方法 fruits.forEach(fruit -> System.out.println(fruit));
http://www.jsqmd.com/news/1015082/

相关文章:

  • 法考背诵资料pdf|背诵|资料已整理
  • 从模糊到清晰:Real-ESRGAN-GUI如何让AI图像修复变得轻松简单
  • 如何快速搭建个人云游戏平台:Sunshine游戏串流终极完整教程
  • 计算机Java毕设实战-基于 SpringBoot 技术栈的一体化宠物服务平台【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 抖音下载器技术深度解析:从无水印下载到批量处理的完整解决方案
  • 学Java遇中文乱码?别慌,这里有解决秘籍
  • [Android] 贝格手机罗盘_2.8版本
  • 2026年成都货架厂家哪家靠谱?多维度实测对比与真实案例解析 - 优质品牌商家
  • 如何彻底解决Windows 11文件资源管理器窗口混乱问题:终极标签管理指南
  • 法考系统强化内部讲义2026|系统强化|资料已整理
  • 独立开发者如何用 Stripe 搭建按量计费与订阅系统
  • SD-PPP:如何在Photoshop中一键召唤AI绘画助手,让创意效率提升300%?
  • Sunshine终极指南:如何免费搭建你的个人云游戏服务器
  • 认准报喜鸟【2026街坊私藏】清远管道疏通六强诚信榜:不坐地起价、不暴力施工、30分钟上门、一口价明码 - 极速版本
  • Python PDF处理终极指南:5分钟掌握PyPDF核心功能
  • 计算机Java毕设实战-基于 Spring Boot+Vue 的智能调查问卷系统的设计与实现 基于前后端分离的在线调查问卷系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 终极指南:3分钟快速实现Figma界面中文汉化,设计师必备工具
  • 告别手动操作:京东自动化脚本终极指南,解放双手轻松赚京豆
  • 开源阅读鸿蒙版:基于HarmonyOS的分布式数字阅读架构解析与技术实践
  • 图片去水印用什么工具,这6款我实测了一遍
  • Display Driver Uninstaller:彻底解决显卡驱动问题的5步终极方案
  • 2026年液压万能试验机行业深度分析:耐用型设备选购指南与优质厂家评测 - 优质品牌商家
  • 法考主观题答题模板|主观题模板|资料已整理
  • MPC8260 MCC全局发送欠载(GUN)错误诊断与恢复实战指南
  • 【计算机毕业设计案例】基于 SpringBoot 的社区垃圾回收统计系统的设计与实现 智慧社区垃圾分类信息化管理系统(程序+文档+讲解+定制)
  • 【毕业设计】基于 Web 的数学题库智能组卷系统的设计与实现 面向教学场景的 Web 数学试题组卷系统(源码+文档+远程调试,全bao定制等)
  • Agent(1):核心揭秘。每次与大模型对话,究竟发送了哪些数据?
  • Topit:免费开源macOS窗口置顶工具的完整使用指南
  • 全志开发环境搭建及编译构建
  • 11 项实用新型专利 + 1 项软著 + 4 项商标!武科环保构建全方位自主知识产权护城河 - 广东科技观察