迭代器(Iterator)与 ListIterator 的使用

news2024/11/24 14:47:22

目录

一. Iterator 接口

例子:

二. ListIterator 接口

三. Iterable 接口

例子:

四. List 接口

五. Iterable接口 与 Iterator 接口 在 ArrayList 中 的使用

六. List 接口 与 ListIterator 接口 在 ArrayList 中 的使用 


一. Iterator 接口

Iterator 接口 又叫迭代器。里面有两个抽象方法。

实现Iterator接口,必须重写这两个抽象方法。

例子:

那么,一个类A实现了Iterator接口,并重写了hasNext()和next()这两个抽象方法。Iterator a = new A(); 发生了向上转型,则,a这个Iterator类型的引用调用hasNext()和next()这两个方法,调用的是重写的。

二. ListIterator 接口

ListIterator 接口,继承 Iterator 接口,继承了hasNext(),next(),等抽象方法。当然也有自己新增的抽象方法。

实现ListIterator接口,必须重写所有的抽象方法。

三. Iterable 接口

Iterable 接口,里面有一个抽象方法iterator(),这个抽象方法的返回值类型是一个接口类型(Iterator接口),返回的是一个Iterator接口类型的对象(很大可能发生了向上转型,由原来的子类类型向上转型为父接口Iterator接口类型),即返回一个迭代器对象。

实现Iterable接口,必须重写这个抽象方法,调用iterator方法会返回一个Iterator接口类型的对象。

例子:

那么,一个类A实现了Iterable接口,并重写了iterator()这个抽象方法。类B实现了Iterator接口,重写了抽象方法hasNext()和next()。

A a = new A();则,a这个引用就可以调用iterator()这个方法。调用这个iterator方法会返回一个Iterator接口类型的对象new B()( B类型向上转型为 Iterator接口类型)。Iterator it = a.iterator(); 用引用 it 接收了,it这个Iterator类型的引用就可以调用Iterator接口中的方法,特别的,因为子类B重写了 父接口 Iterator中的hasNext()和next()方法,所以调用这些方法时调用的是重写的。(因为发生向上转型时,父类/父接口类型的引用可以访问它们特有的方法,以及子类重写的方法)

如下:

四. List 接口

List接口,里面有一个抽象方法 listIterator(),这个抽象方法的返回值类型是 ListIterator ,(这里大概率会发生向上转型,由子类类型转变为父接口 ListIterator类型)

实现List接口,必须重写所有的抽象方法,当然包括 listIterayor()这个抽象方法,调用 listIterator 方法会返回一个 ListIterator 类型的对象。

五. Iterable接口 与 Iterator 接口 在 ArrayList 中 的使用

Iterable 接口中有抽象方法 iterator()

 

对于ArrayList集合类来说,ArrayList类实现了Iterable接口,并且重写了接口中的iterator抽象方法。

那么ArrayList类型的引用就可以调用  iterator方法 ,会返回  new Itr()这个对象(返回值类型是Iterator,所以这里发生了向上转型,Itr类型向上转型为Iterator类型),用 Iterator类型的引用 it 接收,it这个Iterator类型的引用就可以调用Iterator接口中的方法,特别的,因为子类Itr 重写了 父接口 Iterator中的hasNext()和next()等方法,所以调用这些方法时调用的是重写的。(因为发生向上转型时,父类/父接口类型的引用可以访问它们特有的方法,以及子类重写的方法)

如下,就完成了ArrayList的遍历:

六. List 接口 与 ListIterator 接口 在 ArrayList 中 的使用 

List接口中有抽象方法  listIterator()

对于ArrayList集合类来说,ArrayList类实现了List接口,并且重写了接口中的listIterator抽象方法。

那么ArrayList类型的引用就可以调用  listIterator方法 ,会返回  new ListItr()这个对象(返回值类型是ListIterator,所以这里发生了向上转型,ListItr类型向上转型为 ListIterator 类型),用 ListIterator 类型的引用 lt 接收,lt这个ListIterator类型的引用就可以调用ListIterator接口中的方法,(因为ListIterator 接口 继承 Iterator 接口,所以ListIterator 接口中也有hasNext等抽象方法)特别的,因为 Itr中重写了 hasNext()和next()等方法,而 ListItr 继承 Itr,所以ListItr 中 也该有重写的hasNext()和next()等方法,所以调用这些方法时调用的是重写的。(因为发生向上转型时,父接口类型的引用,访问的是子类中重写的方法)

如下,就完成了ArrayList的遍历:

 还可以这样写:

 

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

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

相关文章

网址生成二维码要怎么实现?1分钟教程来啦!

将网址链接转换成一个二维码,方法很简单。 今年六月份,海澜之家在父亲节的活动中,就使用了一个网址链接二维码。扫描地铁站内的海报上的二维码,就能跳转到一篇海澜之家的微信公众号文章里,查看100个父亲的故事。 其实…

网络电视盒子哪个好?回购率最高电视盒排行榜揭晓!

在挑选电视盒子的时候,我们不能光看配置,也要看系统优化、广告植入等方面,不知道网络电视盒子哪个好,可以借鉴目前业内最新发布的电视盒子回购率排行榜,看看目前用户口碑最好的是哪些机型。 ●泰捷WEBOX 60Pro电视盒子…

PyTorch从零开始实现ResNet

文章目录 代码实现参考 代码实现 本文实现 ResNet原论文 Deep Residual Learning for Image Recognition 中的50层,101层和152层残差连接。 代码中使用基础残差块这个概念,这里的基础残差块指的是上图中红色矩形圈出的内容:从上到下分别使用…

利用rollup打包 第三方库 @sentry/browser 为 umd 格式

背景 最近 老项目 多入口打包 引入sentry监控 ,由于不想 在各个入口 都去加sentry 相关逻辑,最后 在 统一的模版文件 html 中 通过 script 标签 引入sentry ,并 初始化操作。 要想保证 script 标签 引入 sentry文件能使用。 需要 保证sentry…

学习ts(一)数据类型(基础类型和任意类型)

运行 起步安装 npm install typescript -g 运行tsc index.ts生成对应的js文件,然后使用node index.js执行js文件 为了方便运行还可以安装插件,ts-node index.ts运行即可 npm i ts-node -g npm init -y npm i types/node -D基本数据类型 // 1.字符…

让光存在,探索光耦继电器的魔力

光耦合器继电器是电路中的无名英雄,正在改变我们实现电气安全和控制的方式。这些卓越的设备(也称为光电耦合器继电器)由于其在电气隔离电路上传输信号和功率的独特能力而在各个行业中广受欢迎。今天,我们深入探讨光耦合器继电器背…

大厂面试篇--2023软件测试八股文最全文档,有它直接大杀四方

前言 已经到了金九银十的黄金招聘季节了,还在准备面试跳槽涨薪的小伙伴们可以看看本篇文章哟,这里呢笔者就不多说废话了直接上干货!答案已整理好,文末拿去即可!非常好用! 一、字节跳动测试面经篇 1、在搜…

【管理运筹学】第 5 章 | 整数规划 (1,问题提出与分支定界法)

文章目录 引言一、整数规划问题的提出1.1 整数规划的数学模型1.2 整数规划问题的求解 二、分支定界法2.1 分支与定界2.2 基本求解步骤(一)初始化(二)分支与分支树(三)定界与剪枝(四)…

正中优配:2023新股上市涨跌幅规则?新股上市涨跌幅限制为几天?

A股与美股不同,股票存在涨跌幅限制,那么,2023新股上市涨跌幅规矩?新股上市涨跌幅限制为几天?下面正中优配为我们预备了相关内容,以供参阅。 2023年新股上市涨跌幅存在以下规矩: 1、主板初次公开…

mock.js引发的报错Corrupted zip: missing xxx bytes

背景: 之前项目没引入mock.js,出于产品要宣传售卖该项目,后端那套服务需要真实场景,和产品经理商量下前端出个假数据的页面,所以复制几个页面mock数据用于产品宣传 首先了解下mock.js Mock 是一种用于模拟数据和行为的…

【QT】 QFileQFileInfo文件操作

很高兴在雪易的CSDN遇见你 ,给你糖糖 欢迎大家加入雪易社区-CSDN社区云 前言 本文分享QT对文件的操作技术,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞关注,小易会继续努力分享,一起进步! 你的点…

恢复已被删除,但是能然有进程调用的文件

当Linux计算机受到入侵时,常见的情况是日志文件被删除,以掩盖攻击者的踪迹。管理错误也可能导致意外删除重要的文件,比如在清理旧日志时,意外地删除了数据库的活动事务日志。有时可以通过lsof来恢复这些文件。 当进程打开了某个文…

【枚举边+MST+组合计数】CF1857G

Problem - 1857G - Codeforces 题意: 思路: 首先观察一下样例: 可以发现对于每一对点,贡献是 s - 这对点对应的环的最大边 1 那么这样就有了 n^2 的做法 然后,根据惯用套路,枚举树上的点对问题可以转…

深入解析美颜SDK:算法、效果与实现

在当今数字化社会中,图像处理和美化技术已经成为了许多应用领域的重要组成部分,尤其在视频直播领域,美颜技术更是无处不在。直播美颜SDK作为一种集成的软件工具包,为开发者和应用提供了强大的美颜功能。 一、算法原理 磨皮算法…

理解RDMA SGL

1. 前言 在使用RDMA操作之前,我们需要了解一些RDMA API中的一些需要的值。其中在ibv_send_wr我们需要一个sg_list的数组,sg_list是用来存放ibv_sge元素,那么什么是SGL以及什么是sge呢?对于一个使用RDMA进行开发的程序员来说&…

Python教程(9)——Python变量类型列表list的用法介绍

列表操作 创建列表访问列表更改列表元素增加列表元素修改列表元素删除列表元素 删除列表 在Python中,列表(list)是一种有序、可变的数据结构,用于存储多个元素。列表可以包含不同类型的元素,包括整数、浮点数、字符串等…

服务器如何防止cc攻击

对于搭载网站运行的服务器来说,cc攻击应该并不陌生,特别是cc攻击的攻击门槛非常低,有个代理IP工具,有个cc攻击软件就可以轻易对任何网站发起攻击,那么服务器如何防止cc攻击?请看下面的介绍。 服务器如何防止cc攻击&a…

只需要自动售货机,商业模式立马大变样!

随着互联网、大数据和人工智能的蓬勃发展,商业模式正以前所未有的方式融合,其中自动售货机作为新零售模式的一颗璀璨明珠,正引领着购物体验的革命。这个巧妙的结合将消费者的便利、数据的智能分析以及科技的创新融为一体,重新定义…

【日常积累】HTTP和HTTPS的区别

背景 在运维面试中,经常会遇到面试官提问http和https的区别,今天咱们先来简单了解一下。 超文本传输协议HTTP被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果…

你的汽车充电桩控制板可能比你的智能手机还要智能?

你是否想过,你的汽车充电桩控制板可能比你的智能手机还要智能?今天我们就来聊聊这个话题。 汽车充电桩控制板的智能性让充电过程更加高效、安全。首先,它具备自检功能,就像你的手机一样,不仅能检查出设备的工作状态,还…