一分钟彻底掌握Java迭代器Iterator
Iterator
Iterator 是 Java 的 java.util 包中的一个接口
iterator() 是 Java 集合框架中的一个方法,它返回一个 Iterator 对象,该对象可以用来遍历集合中的元素。
Iterator确实是一个接口,你不能直接实例化一个接口。但是,你可以获取一个实现了Iterator接口的对象。这通常是通过调用一个集合的iterator()方法来完成的。 在你的代码中,Iterator<Student3> it=list.iterator();这行代码做的就是这个。list.iterator()方法返回一个Iterator对象,这个对象是ArrayList类的一个内部类实例,这个内部类实现了Iterator接口。 所以,虽然你不能直接实例化Iterator接口,但你可以通过调用某些方法(如iterator())来获取实现了Iterator接口的对象,然后使用这个对象来遍历集合。
Iterator 是 Java 集合框架中用于遍历集合元素的一个接口。以下是 Iterator 接口中常用方法的表格表示:
| 方法 | 描述 |
|---|---|
hasNext() | 检查是否还有下一个元素可以迭代。如果有,返回 true;否则返回 false。 |
next() | ==返回迭代中的下一个元素。==在第一次调用之前,应调用 hasNext() 来确保还有下一个元素。如果已到达集合末尾,再次调用此方法将抛出 NoSuchElementException。 |
remove() | 从迭代器最后返回的元素(即最近一次调用 next() 方法的元素)所在的集合中移除它。在调用 remove() 之前,必须先调用 next()。否则,将抛出 IllegalStateException。此外,并非所有的迭代器实现都支持 remove() 操作,如果不支持,调用此方法将抛出 UnsupportedOperationException。 |
需要注意的是,Iterator 本身并不包含集合元素,它只是一个用于遍历集合的接口。在实际使用中,你会通过集合对象(如 List、Set)的 iterator() 方法来获取一个 Iterator 对象,然后使用该对象来遍历集合中的元素。
此外,虽然 Iterator 在 Java 集合框架中非常常用,但在并发环境下使用时需要特别注意线程安全问题。如果需要在多线程环境中安全地遍历集合,可以考虑使用并发集合(如 ConcurrentHashMap)或在使用迭代器时加上适当的同步措施。
[!tip] 注意
每写一次next()就相当于调用一次,意味着跳过一个对象
public class MyListDemo {public static void main(String[] args) {ArrayList<Student3> list = new ArrayList<>();list.add(new Student3("张三", 18, 90));list.add(new Student3("李四", 19, 80));list.add(new Student3("张五", 20, 85));list.add(new Student3("张六", 21, 95));list.add(new Student3("李七", 22, 75));int score = 0;int count = 0;Iterator<Student3> it = list.iterator();while (it.hasNext()) {Student3 student = it.next();//这里一定一定要注意if (student.name.startsWith("张")) {score += student.score;count++;}}if (count != 0) {System.out.println("所有姓“张”的同学的平均成绩为:" + score / count);} else {System.out.println("没有姓“张”的同学。");}}
}
ListIterator
是 Java 集合框架中的一个接口,它允许程序员在列表(如 ArrayList、LinkedList 等)中双向遍历,同时支持元素的添加和删除操作。由于 ListIterator 是一个接口,它并没有直接的“表格”表示,但我可以为你描述其主要的方法和属性,以表格的形式呈现。
ListIterator获取方法的详细说明:
- listIterator()方法:
- 此方法返回列表(List)的列表迭代器(从头到尾)。
- 示例:
ListIterator<String> iterator = list.listIterator();
- listIterator(int index)方法:
- 此方法返回列表(List)中指定位置的列表迭代器。索引指定了迭代器首次调用
next方法时的元素位置,或者首次调用previous方法时的前一个元素位置。 - 示例:
ListIterator<String> iterator = list.listIterator(2);这里,迭代器将从索引为2的元素开始。
- 此方法返回列表(List)中指定位置的列表迭代器。索引指定了迭代器首次调用
| 方法 | 描述 |
|---|---|
boolean hasNext() | 如果列表迭代器有多个元素,则返回 true(在正向遍历列表中时)。 |
E next() | 返回列表中的下一个元素,并将迭代器位置向前移动一个位置。 |
boolean hasPrevious() | 如果列表迭代器在反向遍历列表时有多个元素,则返回 true。 |
E previous() | 返回列表中的前一个元素,并将迭代器位置向后移动一个位置。 |
int nextIndex() | 返回对 next 的后续调用将返回的元素的索引(在正向遍历列表中时)。 |
int previousIndex() | 返回对 previous 的后续调用将返回的元素的索引(在反向遍历列表中时)。 |
void remove() | 从列表中删除上次 next 或 previous 访问的元素(可选操作)。 |
void set(E e) | 用指定的元素替换上次 next 或 previous 访问的元素(可选操作)。 |
void add(E e) | 将指定的元素插入列表(可选操作)。该元素将插入到 next 或 previous 最后一次访问的位置。 |
注意:
ListIterator的remove、set和add方法都是可选操作,这意味着并非所有的ListIterator实现都必须支持它们。例如,一个只读的ListIterator可能会抛出UnsupportedOperationException如果调用了这些方法。ListIterator通常通过调用列表的ListIterator<E> listIterator()或ListIterator<E> listIterator(int index)方法获得。
相关文章:
一分钟彻底掌握Java迭代器Iterator
Iterator Iterator 是 Java 的 java.util 包中的一个接口 iterator() 是 Java 集合框架中的一个方法,它返回一个 Iterator 对象,该对象可以用来遍历集合中的元素。 Iterator确实是一个接口,你不能直接实例化一个接口。但是,你可以…...
第三十七篇——麦克斯韦的妖:为什么要保持系统的开放性?
目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 如果没有详细的学习这篇文章,我觉得我就是被麦克斯韦妖摆弄的…...
青岛网站建设一般多少钱
青岛网站建设的价格一般会根据网站的规模、功能、设计风格等因素来定,价格会存在着一定的差异。一般来说,一个简单的网站建设可能在数千元到一万元之间,而一个复杂的大型网站建设可能会需要数万元到数十万元不等。所以在选择网站建设服务时&a…...
Linux 进程状态:TASK_INTERRUPTIBLE 和 TASK_UNINTERRUPTIBLE
文章目录 1. 前言2. TASK_INTERRUPTIBLE 和 TASK_UNINTERRUPTIBLE2.1 语义2.2 实现2.2.1 TASK_INTERRUPTIBLE 实现2.2.1.1 等待的条件成立时 唤醒2.2.1.2 信号 唤醒2.2.1.3 中断 唤醒2.2.1.3.1 内核态的处理过程2.2.1.3.2 用户态的处理过程 2.2.2 TASK_UNINTERRUPTIBLE 实现 2.…...
vue3使用vant4的列表vant-list点击进入详情自动滚动到对应位置,踩坑日记(一天半的踩坑经历)
1.路由添加keepAlive <!-- Vue3缓存组件,写法和Vue2不一样--><router-view v-slot"{ Component }"><keep-alive><component :is"Component" v-if"$route.meta.keepAlive"/></keep-alive><component…...
Linux的fwrite函数
函数原型: 向文件fp中写入writeBuff里面的内容 int fwrite(void*buffer,intsize,intcount,FILE*fp) /* * description : 对已打开的流进行写入数据块 * param ‐ ptr :指向 数据块的指针 * param ‐ size :指定…...
python udsoncan 详解
python udsoncan 详解 udsoncan 是一个Python库,用于实现汽车统一诊断服务(Unified Diagnostic Services,UDS)协议。UDS是一种用于汽车诊断的标准化通信协议,它定义了一系列的服务和流程,用于ECUÿ…...
基于自组织长短期记忆神经网络的时间序列预测(MATLAB)
LSTM是为了解决RNN 的梯度消失问题而诞生的特殊循环神经网络。该网络开发了一种异于普通神经元的节点结构,引入了3 个控制门的概念。该节点称为LSTM 单元。LSTM 神经网络避免了梯度消失的情况,能够记忆更长久的历史信息,更能有效地拟合长期时…...
240629_昇思学习打卡-Day11-Vision Transformer中的self-Attention
240629_昇思学习打卡-Day11-Transformer中的self-Attention 根据昇思课程顺序来看呢,今儿应该看Vision Transformer图像分类这里了,但是大概看了一下官方api,发现我还是太笨了,看不太明白。正巧昨天学SSD的时候不是参考了太阳花的…...
代码随想录-Day43
52. 携带研究材料(第七期模拟笔试) 小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。他需要带一些研究材料,但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实验样本等…...
C++——探索智能指针的设计原理
前言: RAII是资源获得即初始化, 是一种利用对象生命周期来控制程序资源地手段。 智能指针是在对象构造时获取资源, 并且在对象的声明周期内控制资源, 最后在对象析构的时候释放资源。注意, 本篇文章参考——C 智能指针 - 全部用法…...
办公效率新高度:利用办公软件实现文件夹编号批量复制与移动,轻松管理文件
在数字化时代,我们的工作和生活都围绕着海量的数据和文件展开。然而,随着数据量的不断增加,如何高效地管理这些数字资产成为了摆在我们面前的一大难题。今天,我要向您介绍一种革命性的方法——利用办公软件实现文件夹编号批量复制…...
Windows kubectl终端日志聚合(wsl+ubuntu+cmder+kubetail)
Windows kubectl终端日志聚合 一、kubectl终端日志聚合二、windows安装ubuntu子系统1. 启用wsl支持2. 安装所选的 Linux 分发版 三、ubuntu安装kubetail四、配置cmder五、使用 一、kubectl终端日志聚合 k8s在实际部署时,一般都会采用多pod方式,这种情况下…...
【MySQL】数据库——事务
一.事务概念 事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行事务是一个不可分割的工作逻辑单元,在数…...
python代码缩进规范(2空格或4空格)
C、C、Java、C#、Rust、Go、JavaScript 等常见语言都是用"{“和”}"来标记一个块作用域的开始和结束,而Python 程序则是用缩进来表示块作用域的开始和结束: 作用域是编程语言里的一个重要的概念,特别是块作用域,编程语言…...
前后端分离的后台管理系统开发模板(带你从零开发一套自己的若依框架)上
前言: 目前,前后端分离开发已经成为当前web开发的主流。目前最流行的技术选型是前端vue3后端的spring boot3,本次。就基于这两个市面上主流的框架来开发出一套基本的后台管理系统的模板,以便于我们今后的开发。 前端使用vue3ele…...
【C++ | 委托构造函数】委托构造函数 详解 及 例子源码
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...
iCloud邮件全攻略:设置与使用终极指南
标题:iCloud邮件全攻略:设置与使用终极指南 摘要 iCloud邮件是Apple提供的一项邮件服务,允许用户在所有Apple设备上访问自己的邮件。本文将详细介绍如何在各种设备和邮件客户端上设置和使用iCloud邮件账户,确保用户能够充分利用…...
【计算机毕业设计】基于微信小程序的电子购物系统的设计与实现【源码+lw+部署文档】
包含论文源码的压缩包较大,请私信或者加我的绿色小软件获取 免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者…...
CSS实现动画
CSS实现动画主要有三种方式:transition,transform,和animation1。以下是一些详细的逻辑,实例和注意事项: Transition:transition可以为一个元素在不同状态之间切换的时候定义不同的过渡效果。例如ÿ…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...
什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...
车载诊断架构 --- ZEVonUDS(J1979-3)简介第一篇
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…...
用递归算法解锁「子集」问题 —— LeetCode 78题解析
文章目录 一、题目介绍二、递归思路详解:从决策树开始理解三、解法一:二叉决策树 DFS四、解法二:组合式回溯写法(推荐)五、解法对比 递归算法是编程中一种非常强大且常见的思想,它能够优雅地解决很多复杂的…...
