【Java基础】集合遍历:深入理解迭代器(Iterator)与增强for循环

在Java集合框架中,遍历集合元素是我们日常开发中最常用的操作之一。今天我们来总结一下两种核心的遍历方式:迭代器(Iterator)增强for循环,并重点剖析一下迭代器的底层逻辑。

一、 迭代器 (Iterator) 概述

1. 什么是迭代器?

迭代器是用来遍历集合的专用方式

  • 注意:数组是没有迭代器的,迭代器是专门为集合(Collection)设计的。但是数组也可以使用增强for循环,只是增强for循环的底层不一样。
  • 在Java中,迭代器的代表接口是 Iterator

2. 如何获取迭代器?

所有的 Collection 集合都提供了一个方法来获取迭代器对象:

方法名称说明
Iterator<E> iterator()返回集合中的迭代器对象,该迭代器对象默认指向当前集合的第一个元素之前的位置。

3. Iterator 常用方法

方法名称说明
boolean hasNext()询问当前位置是否有元素存在。存在返回 true,不存在返回 false
E next()获取当前位置的元素,并同时将迭代器对象指向下一个元素处

重点理解:迭代器类似“指针”

很多初学者觉得迭代器很抽象,其实我们可以把它想象成 C/C++ 中的指针或者一个游标

  1. 初始状态:当你调用 iterator() 时,这个“指针”并没有指向第一个元素,而是指向第一个元素的前面(索引 -1 的位置)。
  2. hasNext():相当于问指针:“你后面还有东西吗?”
  3. next():这个动作包含两步操作:
    • 第一步:指针向后移动一位(指向下一个元素)。
    • 第二步:把指针当前指向的这个元素拿出来给你。

代码演示:

Collection<String> c = new ArrayList<>();
c.add("Hello");
c.add("World");

// 1. 获取迭代器(指针初始化,指向 "Hello" 之前)
Iterator<String> it = c.iterator();

// 2. 判断是否有下一个元素
if (it.hasNext()) {
    // 3. 指针后移,取出 "Hello"
    String s = it.next(); 
    System.out.println(s);
}

if (it.hasNext()) {
    // 指针继续后移,取出 "World"
    String s = it.next();
    System.out.println(s);
}

二、 增强 for 循环 (Enhanced for-loop)

虽然迭代器功能强大,但写起来代码略显繁琐(需要定义变量、判断、取值)。Java 5 引入了增强 for 循环来简化这一过程。

1. 格式

for (元素的数据类型 变量名 : 数组或者集合) {
    // 循环体
}

2. 代码示例

Collection<String> c = new ArrayList<>();
c.add("Java");
c.add("Python");

// 增强for遍历
for (String s : c) {
    System.out.println(s);
}

3. 核心本质(面试考点)

  • 适用范围:增强 for 可以用来遍历集合或者数组
  • 底层原理增强 for 遍历集合,本质就是迭代器遍历集合的简化写法。
    • 当你写 for(String s : c) 时,编译器在底层会自动帮你生成类似 Iterator 的代码。
    • 这也解释了为什么在增强 for 循环中不能直接删除集合元素(会抛出 ConcurrentModificationException),因为底层迭代器检测到了集合结构被修改。

4.写增强for语句的快捷键

集合对象名.for+按Tab健

三、 总结

  1. 迭代器是遍历集合的标准方式,理解它就像一个移动的指针next() 方法既是“移动”也是“取值”。
  2. 增强 for 是迭代器的语法糖,写起来更简洁,适合单纯的遍历读取。
  3. 如果需要在遍历过程中删除元素,必须使用迭代器的 remove() 方法,而不能使用集合本身的 remove() 或增强 for。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值