一、迭代器遍历集合
1. 迭代器概述

专用遍历方式: 迭代器是专门用于遍历集合的工具,数组没有迭代器功能
代表类: Java中使用Iterator类作为迭代器的代表
获取方式: 通过集合的iterator()方法获取专属迭代器对象
泛型统一: 迭代器类型与集合元素类型保持一致(如String集合返回String类型迭代器)
2. 迭代器中的常用方法
hasNext(): 检查当前位置是否有元素存在,存在返回true,不存在返回false
next(): 获取当前位置元素并将迭代器指向下一个元素(注意是"取当前移下"而非"取下一个")
初始位置: 新创建的迭代器默认指向集合第一个元素(索引0位置)
1)示例
// 创建字符串列表并添加元素
ArrayList<String> list = new ArrayList<>();
list.add("Hello");
list.add("World");
list.add("Java");
list.add("IDEA");
// 使用Iterator迭代器遍历并打印列表元素
Iterator it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
// 使用增强for循环遍历并打印列表元素
for (String s : list) {
System.out.println(s);
}迭代器遍历示例
基础使用:
越界异常: 当调用next()次数超过元素数量时会抛出NoSuchElementException
循环改进:
3. 迭代器执行流程
工作流程:
初始时迭代器指向第一个元素(索引0)
hasNext()检查当前cursor位置是否有效(cursor != size)
next()取出当前元素并将cursor后移一位
循环直到hasNext()返回false
指针移动: 每次next()操作包含两个动作:获取当前元素 + 将指针移向下个位置
4. 迭代器源码分析
实现类: ArrayList中的Itr内部类实现Iterator接口
核心字段:
int cursor: 下一个要返回元素的索引(初始为0)
int lastRet: 最后返回元素的索引(初始为-1)
hasNext原理: 判断cursor != size(当前索引是否有效)
next原理:
检查并发修改(checkForComodification)
获取cursor当前值i
通过i获取元素data[i]
将cursor++指向下个位置
设置lastRet = i(记录最后返回索引)
5. 内容总结
获取方式: 通过集合的iterator()方法获取
遍历原理: 基于索引的"取当前移下"机制
注意事项:
迭代过程中不能直接修改原集合(可能引发ConcurrentModificationException)
每次next()前必须用hasNext()检查,否则可能抛出NoSuchElementException
设计特点: 迭代器本质上是集合内部的一个位置指针,不是独立于集合的外部对象
默认评论
Halo系统提供的评论