Java集合核心:Iterator迭代器全解析(源码+三种遍历方式+踩坑指南)
·
在Java集合体系中,遍历是最常用的操作之一。针对单列集合,Java 提供了迭代器作为通用的遍历标准,同时衍生出增强 for 循环、forEach 方法等多种便捷写法。本文将从基础使用、底层源码、遍历方式对比、常见坑点四个维度,系统梳理迭代器相关全部知识点。
Collection 接口基础铺垫
在讲解迭代器之前,先明确两个核心前提:
- Collection 是所有单列集合的父接口,它定义的通用方法,所有单列集合(ArrayList、LinkedList、HashSet 等)都可以直接使用。
- remove() 、 contains() 方法底层依赖对象的 equals 方法。
- 自定义对象存集合,必须重写equals()和toString(),否则默认比较内存地址,导致删不掉、查不到元素。
迭代器核心使用
1、核心两个方法
- hasNext() :判断是否还有下一个元素
- next() :获取元素,指针后移
2、使用流程
- 集合获取迭代器
- while循环判断hasNext()
- next()取出元素
- 指针原理:迭代器初始指针在第一个元素之前执行逻辑:先取值,再指针后移
ArrayList迭代器源码核心
迭代器由内部类 Itr 实现,三个核心变量:
- cursor :下一个元素索引(遍历指针)
- lastRet :上一次遍历元素索引
- expectedModCount :记录集合修改次数,防止并发修改异常
核心源码逻辑:
- hasNext() :判断 cursor != size
- next() :校验并发修改 → 取值 → 指针+1
单列集合三种遍历方式
1、Iterator迭代器遍历
- 优点:遍历中可以安全删除元素
- 缺点:代码稍长
- 适用:需要遍历删除元素的场景
2、增强for循环(foreach)
语法糖,编译后本质就是迭代器
- 优点:代码简洁
- 缺点:遍历中不能增删集合元素
3、JDK8 forEach遍历
Lambda极简遍历
- 优点:代码最简洁
- 缺点:无法操作索引、不能增删元素
三种遍历对比总结
- 需要删元素 → 原生迭代器
- 普通遍历、追求简洁 → 增强for
- 简单打印、流式处理 → forEach + Lambda
高频踩坑总结(必记)
- 一次循环只能调用一次next()多次调用会跳过元素,直接报错。
- 迭代遍历中禁止使用集合add/remove
会抛出 ConcurrentModificationException 并发修改异常✅ 删元素必须使用:迭代器自带 remove() - 自定义对象必须重写equals否则集合删除、判断包含全部失效。
最终总结
- Iterator是Java单列集合统一遍历规范。
- 增强for是迭代器的语法糖,底层完全一致。
- 迭代器依靠指针遍历,支持安全删除元素。
- 遍历过程禁止集合结构性修改,防止并发修改异常。
- 自定义实体类存集合,必须重写equals、toString。
更多推荐



所有评论(0)