Collection集合迭代器

点 赞
0
热 度
3
评 论
0
  1. 首页
  2. Java开发合集
  3. Java基础语言进阶
  4. Collection集合迭代器

一、迭代器遍历集合

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

  • 设计特点: 迭代器本质上是集合内部的一个位置指针,不是独立于集合的外部对象

二、知识小结

知识点

核心内容

考试重点/易混淆点

难度系数

Collection遍历方式

迭代器遍历是Collection集合通用遍历方法,适用于所有单列集合

迭代器初始位置在集合第一个元素(索引0处)

迭代器原理

通过iterator()方法获取迭代器对象,使用hasNext()next()方法遍历

next()是取当前元素后移指针(非取下一个元素)

迭代器越界

当迭代器超过集合元素数量时会抛出NoSuchElementException

必须配合循环使用避免越界

源码分析

迭代器内部维护cursor游标(初始为0),通过lastRet记录最后返回位置

实际取元素时用当前cursor值而非lastRet

与for循环对比

Collection不能用for循环遍历因为缺乏索引支持(仅List系列有索引)

迭代器是集合通用遍历方式

循环改进方案

使用while(it.hasNext())配合it.next()实现安全遍历

每次next()后自动移动游标


余乃云水散人,栖于数字之墟。性耽幽静,常以青简为田,墨痕为穗。晨起推窗,听松风煮茶;夜阑掩卷,伴竹影扫阶。此间筑小筑三椽,藏闲话若干:或遇史海遗珠,则录以素札;偶得诗瓢碎玉,便缀作清吟。往来皆烟霞客,谈笑有鸿儒踪。诸君若得暇,不妨暂驻云履,共品一盏烟岚,半卷春秋。

具有版权性

请您在转载、复制时注明本文 作者、链接及内容来源信息。 若涉及转载第三方内容,还需一同注明。

具有时效性

文章目录

欢迎来到南鸢宸羲的站点,为您导航全站动态

185 文章数
39 分类数
2 评论数
48标签数
最近评论
西北技术支持中心

西北技术支持中心


缺点啥呢,有说明吗

西北技术支持中心

西北技术支持中心


开始建站了😀