当前位置: 首页 > 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.gsyq.cn/news/1526902.html

相关文章:

  • 计算机Java毕设实战-基于 SpringBoot 技术栈的一体化宠物服务平台【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • [Android] 贝格手机罗盘_2.8版本
  • 独立开发者如何用 Stripe 搭建按量计费与订阅系统
  • SD-PPP:如何在Photoshop中一键召唤AI绘画助手,让创意效率提升300%?
  • 计算机Java毕设实战-基于 Spring Boot+Vue 的智能调查问卷系统的设计与实现 基于前后端分离的在线调查问卷系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 终极指南:3分钟快速实现Figma界面中文汉化,设计师必备工具
  • 告别手动操作:京东自动化脚本终极指南,解放双手轻松赚京豆
  • 开源阅读鸿蒙版:基于HarmonyOS的分布式数字阅读架构解析与技术实践
  • 【计算机毕业设计案例】基于 SpringBoot 的社区垃圾回收统计系统的设计与实现 智慧社区垃圾分类信息化管理系统(程序+文档+讲解+定制)
  • 【毕业设计】基于 Web 的数学题库智能组卷系统的设计与实现 面向教学场景的 Web 数学试题组卷系统(源码+文档+远程调试,全bao定制等)
  • 11 项实用新型专利 + 1 项软著 + 4 项商标!武科环保构建全方位自主知识产权护城河 - 广东科技观察
  • 3个核心问题:如何让AI角色拥有真实的情感反应和动态互动能力
  • 2026年河南艺考画室选择指南:多维对比与真实案例全解析 - 优质品牌商家
  • MPC8260 ATM控制器连接表配置详解:从AAL5/AAL1原理到实战
  • 3分钟搞定B站视频下载:从大会员4K到充电专属内容的终极指南
  • 法考报名需要什么材料|报名材料|资料已整理
  • 杭州本地附近靠谱专业防水补漏公司 全屋建筑漏水检测维修防水隔热施工 - 资讯速览
  • 大容量商用消毒柜厂家排行:实测维度与场景适配对比 - 互联网科技品牌测评
  • FModel技术深度解析:虚幻引擎资源逆向工程的架构解密
  • 2026年中乌兹别克斯坦国际贸易律师咨询:专业选型指南助力企业跨境合规 - 品牌鉴赏官2026
  • Scrcpy Mask:用键鼠重新定义安卓设备控制的游戏规则
  • 2026年6月靠谱的山东回收各类高档茶叶厂家哪家靠谱推荐——普洱茶、崂山绿茶、高档礼盒回收公司选择指南 - 海棠依旧大
  • Java程序员转大模型:做Agent工程化,我成了部门“AI负责人“ [特殊字符]
  • LLM 能力集成:多轮对话的上下文压缩与长文本处理策略
  • 2026年福建印染化工原料供应商实力评测:口碑、渠道与真实案例全解析 - 优质品牌商家
  • 20254108 2025-2026-2 《Python程序设计》实验4报告
  • 2026年6月专业的长春奥迪Q5L隐形车衣门店找哪家推荐,TPU漆面保护膜、全车改色膜、太阳隔热膜选择指南 - 海棠依旧大
  • 2026 北京管道疏通与异味治理机构精选 5 家 马桶 / 厨卫下水 / 地漏除臭服务参考 - 宅安选房屋修缮
  • 5步打造专属AI伙伴:SillyTavern角色卡片终极实用指南
  • 鸿蒙原生应用从0到1:项目搭建与首页开发实战