【Java se】集合——迭代器(Iterator接口)的实现原理

news2024/11/24 2:13:52

目录

一、迭代器的应用——遍历集合

        步骤1:通过集合获取迭代器

        步骤2:使用while循环

案例展示:

二、跟踪源代码

#1. 通过集合获取迭代器

#2. 通过成员方法next( ) 获取每一个集合元素对象

#3. 通过成员方法hasNext( )判断是否进行下一次循环

图示


一、迭代器的应用——遍历集合

        步骤1:通过集合获取迭代器

相关方法:

        Interator<E> iterator( )

        步骤2:使用while循环

相关方法:

        boolean hasNext( )   —— 作为条件判断语句

        E next( )  —— 获取每一个集合元素对象

案例展示:

        下列代码完成统计字符串在集合中出现次数的操作。

public class Test {
	public static void main(String[] args) {
		Collection<String> list = new ArrayList<>();
		list.add("a");
		list.add("a");
		list.add("b");
		list.add("b");
		list.add("c");
		System.out.println("a:"+listTest(list, "a"));	
		System.out.println("b:"+listTest(list, "b"));	
		System.out.println("c:"+listTest(list, "c"));
		System.out.println("xxx:"+listTest(list, "xxx"));	
	}

	public static int listTest(Collection<String> list,String s) {
		Iterator<String> iterator = list.iterator();
		int count = 0;
		while(iterator.hasNext()) {
			String str = iterator.next();
			if(str.equals(s)) {
				count ++;
			}
		}
		return count;
	}
}

二、跟踪源代码

#1. 通过集合获取迭代器

        Interator<E> iterator( )

        以ArrayList为例,以下是ArrayList调用该方法的过程。

public Iterator<E> iterator() {
        return new Itr();
    }

        由于Iterator是一个接口,我们可以得知Itr是其的一个实现类,下列调用的方法否是由此实现类完成实现的。

        这个类除了是Iterator的实现类外,还是ArrayList的成员内部类。

private class Itr implements Iterator<E> {
        int cursor;       
}

        其中包含一个成员变量cursor,没有对其赋初值,则默认初始值为0。

#2. 通过成员方法next( ) 获取每一个集合元素对象

#3. 通过成员方法hasNext( )判断是否进行下一次循环

public boolean hasNext() {
    return cursor != size;
}

        我们知道,在成员内部类中可以直接调用外部类的成员信息。

        这句代码也可改写为:return cursor != this.size;

        通过while每循环一次,cursor+1,初始值为0,即获取数组第一个下标位置的元素。数组最后一个元素的下标为length-1,因此当cursor一直累加直到等于集合的size大小,数组的length长度时,“越界”—— 退出循环。

图示

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/650641.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机组成原理 | 理解二进制编码

二进制的转换 二进制——> 十进制&#xff1a; 从右到左的第 N 位&#xff0c;乘上一个 2 的 N 次方&#xff0c;然后加起来&#xff0c;就变成了一个十进制数例如二进制数&#xff1a;0011&#xff0c;对应的十进制表示&#xff0c;就是 0 2 3 0 2 2 1 2 1 1 2 0…

阿里云斩获 4 项年度云原生技术服务优秀案例

日前&#xff0c;在 ICT 中国2023 高层论坛-云原生产业发展论坛上&#xff0c;由阿里云容器服务提供技术支持的 “数禾科技”和“智联招聘” 两大案例以及阿里云云原生 AI 套件、云原生 FinOps 成本分析套件两大产品技术方案&#xff0c;共同获得 2023 年度云原生应用实践先锋—…

oai核心网启动多切片自动生成方法

简介 启动一个切片需要&#xff1a; 核心网侧&#xff1a; 启动核心网yaml文件及相关配置文件&#xff08;datebase conf healthscripts&#xff09; 对应业务的sever &#xff08;如&#xff09;基站侧&#xff1a; 虚拟机 启动ueransim的yaml文件及相关配置 代理程序&#…

拿捏指针(一)---对指针的基本认识(初级)

文章目录 指针是什么&#xff1f;指针的定义指针的大小 指针类型指针有哪些类型&#xff1f;指针不同类型有什么意义&#xff1f; 野指针野指针的成因如何避免野指针&#xff1f; 指针运算指针 - 整数指针 - 指针指针的关系运算 二级指针 指针是什么&#xff1f; 指针的定义 …

DNDC模型建模方法及在土壤碳储量、温室气体排放、农田减排、土地变化、气候变化

由于全球变暖、大气中温室气体浓度逐年增加等问题的出现&#xff0c;“双碳”行动特别是碳中和已经在世界范围形成广泛影响。国家领导人在多次重要会议上讲到&#xff0c;要把“双碳”纳入经济社会发展和生态文明建设整体布局。同时&#xff0c;提到要把减污降碳协同增效作为促…

MySQL----索引

文章目录 一、索引的概念二、索引的作用索引的副作用创建索引的依据 三、索引的分类和创建3.1普通索引创建直接索引修改表方式创建创建表的时指定索引&#xff08;不推荐使用&#xff09; 3.2唯一索引直接创建唯一索引修改表方式创建创建表时指定 3.3主键索引创建表的时指定修改…

2024年天津农学院专升本拟招生专业限制报考范围

天津农学院2024年升本拟招生专业及报考范围 物流管理 科 类&#xff1a;文史、理工 专业报考范围&#xff1a;不限 人力资源管理 科 类&#xff1a;文史、理工 专业报考范围&#xff1a;不限 水产养殖学 科 类&#xff1a; 理工 专业报考范围如…

微服务springcloud 06.feign框架,配合ribbon 负载均衡和重试,配合hystrix 降级,监控和熔断测试

feign是ribbon hystrix 的整合 01.新建 sp09-feign 项目 第一步&#xff1a; 第二步&#xff1a;选择依赖&#xff1a; pom.xml 需要添加 sp01-commons 依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://…

游泳可以戴的耳机有哪些?四款专业的游泳耳机推荐

现在人们都开始热衷于运动健身&#xff0c;运动时大多会听音乐&#xff0c;市面上的运动耳机层出不穷&#xff0c;多数都是蓝牙耳机&#xff0c;但是有一些运动不太适合。 例如游泳&#xff0c;其他运动都可以将手机放在附近&#xff0c;但是游泳就不行了。所以游泳时可以听歌的…

【云服务】阿里云服务器镜像备份到本地

​ 首先&#xff0c;让我们了解一下阿里云平台上自定义镜像的功能。通过自定义镜像&#xff0c;用户可以将云服务器的当前状态保存为镜像&#xff0c;以便在需要时快速恢复到该状态。此外&#xff0c;自定义镜像还可以作为模板创建新的云服务器&#xff0c;方便用户快速部署相同…

1742_C语言中的指针与数组

全部学习汇总&#xff1a; GreyZhang/c_basic: little bits of c. (github.com) 之所以常常把数组与指针联系到一块儿是因为数组的名字在很多时候等同于指向数组首元素的指针。在写程序的时候&#xff0c;这常常会给我们带来很多方便。尤其是需要把数组作为一个函数的处理对象时…

Java并发(十一)----线程五种状态与六种状态

1、五种状态 这是从 操作系统 层面来描述的 【初始状态】仅是在语言层面创建了线程对象&#xff0c;还未与操作系统线程关联 【可运行状态】&#xff08;就绪状态&#xff09;指该线程已经被创建&#xff08;与操作系统线程关联&#xff09;&#xff0c;可以由 CPU 调度执行 …

Android Studio实现贪吃蛇小游戏

项目目录 一、项目概述二、开发环境三、详细设计四、运行演示五、项目总结 一、项目概述 贪吃蛇是一款经典的街机游戏&#xff0c;不仅在电子游戏史上占有一席之地&#xff0c;也在很多人的童年回忆中留下了深刻的印象。在游戏中&#xff0c;玩家需要操纵一条蛇通过吃食物来增…

leetcode222. 完全二叉树的节点个数(java)

完全二叉树的节点个数 leetcode222. 完全二叉树的节点个数题目描述 递归广度优先遍历二叉树专题 leetcode222. 完全二叉树的节点个数 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/count-complete-tree-nodes 题目描述…

Linux下的打包和压缩/解压解包

文章目录 一、打包和压缩二、Linux下进行打包和压缩1.zip指令&#xff0c;unzip指令2.tar指令 一、打包和压缩 打包呢就是把所有东西装在一起&#xff0c;然后压缩就是将这一包东西给它合理摆放&#xff0c;腾出更多的空间&#xff0c;以便放更多的东西。 压缩可以将如果东西是…

【github加载不出来】github 加载不出来、获取GitHub官方CDN地址、修改系统Hosts文件 刷新缓存

目录 github 加载不出来获取GitHub官方CDN地址修改系统Hosts文件刷新缓存 github 加载不出来 获取GitHub官方CDN地址 https://www.ipaddress.com/打开后如图&#xff0c;右上角搜索查 查找这三个DNS链接的解析地址 http://github.com http://assets-cdn.github.com http://git…

java springboot整合Druid数据源配置

整合的最后一块 我们整合一个数据源 Druid 我们还是打开idea 创建一个项目 路径和版本调一下 路径选一个好的目录就可以了 至于版本 最好是 java 8 JDK 1.8 然后 Next 下一步 这里 spring boot 的版本记得选一下 不要搞太高 2.几即可 Druid 在这里 显然也是找不到的 所以 我…

安卓端Google隐私沙盒归因报告聚焦

自2022年2月Google首次提出将推出隐私沙盒至今已一年有余。现在&#xff0c;安卓端的隐私沙盒Beta测试已针对特定Android13设备正式开始。作为早期测试者&#xff0c;Adjust很高兴与 Google一同迈出增强用户隐私的第一步&#xff0c;并在接下来的旅程中继续携手同行。为帮助移动…

framework编译应用代码

代码编译 APP或Service代码单编调试 1、在aosp文件目录下在将环境变量加载到内存中&#xff0c;在终端中输入下面命令 source build/envsetup.sh 2、选择平台编译选项 lunch 3、输入后会出现一个选择列表&#xff0c;然后输入你想要的项目的序号即可。如下所示我这里选择的7…

【OpenMMLab AI实战营二期笔记】第十天 底层视觉与MMEditing

1.图像超分辨率 1.1 什么是图像超分辨率&#xff1f; 根据从低分辨率图像重构高分辨率图像 1.2 目标&#xff1a; 提高图像的分辨率高分图像符合低分图像的内容恢复图像的细节、产生真实的内容 1.3 应用&#xff1a; 经典游戏高清重制动画高清重制照片修复节约传输高清图…