一分钟彻底掌握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 本身并不包含集合元素,它只是一个用于遍历集合的接口。在实际使用中,你会通过集合对象(如 ListSet)的 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 集合框架中的一个接口,它允许程序员在列表(如 ArrayListLinkedList 等)中双向遍历,同时支持元素的添加和删除操作。由于 ListIterator 是一个接口,它并没有直接的“表格”表示,但我可以为你描述其主要的方法和属性,以表格的形式呈现。

ListIterator获取方法的详细说明:

  1. listIterator()方法
    • 此方法返回列表(List)的列表迭代器(从头到尾)。
    • 示例:ListIterator<String> iterator = list.listIterator();
  2. listIterator(int index)方法
    • 此方法返回列表(List)中指定位置的列表迭代器。索引指定了迭代器首次调用next方法时的元素位置,或者首次调用previous方法时的前一个元素位置。
    • 示例:ListIterator<String> iterator = list.listIterator(2); 这里,迭代器将从索引为2的元素开始。
方法描述
boolean hasNext()如果列表迭代器有多个元素,则返回 true(在正向遍历列表中时)。
E next()返回列表中的下一个元素,并将迭代器位置向前移动一个位置。
boolean hasPrevious()如果列表迭代器在反向遍历列表时有多个元素,则返回 true
E previous()返回列表中的前一个元素,并将迭代器位置向后移动一个位置。
int nextIndex()返回对 next 的后续调用将返回的元素的索引(在正向遍历列表中时)。
int previousIndex()返回对 previous 的后续调用将返回的元素的索引(在反向遍历列表中时)。
void remove()从列表中删除上次 nextprevious 访问的元素(可选操作)。
void set(E e)用指定的元素替换上次 nextprevious 访问的元素(可选操作)。
void add(E e)将指定的元素插入列表(可选操作)。该元素将插入到 nextprevious 最后一次访问的位置。

注意:

  • ListIteratorremovesetadd 方法都是可选操作,这意味着并非所有的 ListIterator 实现都必须支持它们。例如,一个只读的 ListIterator 可能会抛出 UnsupportedOperationException 如果调用了这些方法。
  • ListIterator 通常通过调用列表的 ListIterator<E> listIterator()ListIterator<E> listIterator(int index) 方法获得。

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

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

相关文章

MySQL之覆盖索引

什么是覆盖索引&#xff1f; 覆盖索引&#xff1a;查询时使用了索引&#xff0c;且需要返回的列&#xff0c;在改索引中已经全部能找到。 示例&#xff1a;有user表如下&#xff1a; CREATE TABLE user (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 技术主键,name varch…

Git企业开发---初识Git

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 引言 不知道大家有没有经历这种困惑&#xff0c;当我们要去交某文档时&#xff0c;总是要进行修改&#xff0c;修改后再交…

Softmax函数的作用

Softmax 函数主要用于多类别分类问题&#xff0c;它将输入的数值转换为概率分布。 具体来说&#xff0c;对于给定的输入向量 x [x_1, x_2,..., x_n] &#xff0c;Softmax 函数的输出为 y [y_1, y_2,..., y_n] &#xff0c;其中&#xff1a; 这样&#xff0c;Softmax 函数的输…

人生最有力,最棒的十句话!

人生最有力&#xff0c;最棒的十句话 1、允许一切事发生&#xff0c;所有一切发生的事不是你能阻挡了的&#xff0c;你接受&#xff0c;他也发生&#xff0c;你不接受&#xff0c;他也发生&#xff0c;你还不如坦然面对接受现实。 2、你焦虑的时候千万不要躺着啥也不干&#xf…

全网唯一免费无水印AI视频工具!

最近Morph Studio开始免费公测&#xff01;支持高清画质&#xff0c;可以上传语音&#xff0c;同步口型&#xff0c;最重要的是生成的视频没有水印&#xff01; Morph Studio国内就可以访问&#xff0c;可以使用国内邮箱注册&#xff08;我用的163邮箱&#xff09;&#xff0c;…

Java--回顾方法的调用

1.静态方法与非静态方法 1.当二者皆为静态方式时&#xff0c;可直接类名.方法名调用其方法 2.当调用的方法是静态&#xff0c;被调用的方法为非静态时&#xff0c;调用将会报错 3.出现2情况可通过进行实例化这个类的方式进行调用&#xff0c;如图所示 4.当处于一个类下&#xf…

安卓开发中margin和padding的区别

在 Android 开发中&#xff0c;margin 和 padding 都是用来定义视图&#xff08;View&#xff09;的空间属性&#xff0c;但它们的作用和应用场景有所不同&#xff1a; Margin&#xff08;外边距&#xff09;&#xff1a; Margin 是视图与其他视图之间的空间。它定义了视图之间…

在IDEA中创建Maven项目

2023版IDEA创建Maven项目&#xff08;新版&#xff09; 1.打开IDEA&#xff0c;点击 文件 -> 新建 -> 项目 2.创建Maven项目 3.编写java文件并运行 在src -> java -> 创建一个java文件并运行 如果出现下图 解决办法&#xff1a; 2022版IDEA创建Maven项目&#xf…

GitHub每日最火火火项目(6.29)

1. 项目名称&#xff1a;modelscope / DiffSynth - Studio 项目介绍&#xff1a;该项目能让用户享受扩散模型的神奇之处。扩散模型是一种强大的机器学习技术&#xff0c;在图像生成、音频合成等领域有广泛应用。通过这个项目&#xff0c;用户可以体验到扩散模型带来的创新和有…

判断时间序列中的元素是否为:年初、年末、季初、季末

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 判断时间序列中的元素是否为&#xff1a; 年初、年末、季初、季末 Series.dt.is_year_start Series.dt.is_year_end Series.dt.is_quarter_start Series.dt.is_quarter_end 选择题 关于以下…

SonarQube面试题一卷到底60问及参考答案(3万字长文)

目录 什么是SonarQube?简述其主要功能。 SonarQube中的“分析”过程包括哪几个阶段? 请解释SonarQube中的质量gate(质量门)概念。 SonarQube支持哪些编程语言? 什么是技术债务,并如何在SonarQube中计算它? 描述SonarQube的工作流程,从代码扫描到问题展示。 Sona…

J018_冒泡排序

一、排序过程 如果要对一个数组进行升序排序&#xff1a; 每个轮次两两数字进行比较&#xff0c;如果前面的数字大于后面的数字&#xff0c;则交换两个数字的位置&#xff1b;如果前面的数字小于或等于后面的数字&#xff0c;则这两个数字位置不变。直到把数组中所有数字比较…

Attention (注意力机制)

1. 背景&#xff1a; 字面的意思&#xff1a;给你一些东西(看见一个美女:).....)&#xff0c;你会注意什么&#xff1f; 大数据的时代下&#xff0c;有太多的数据&#xff0c;我们又该如何选择重要的数据呢&#xff1f; Attention 诞生了&#xff0c;但是又该如何去做呢(i.e., …

【计算机网络】期末复习(1)模拟卷

一、选择题 1. 电路交换的三个阶段是建立连接、()和释放连接 A. Hello包探测 B. 通信 C. 二次握手 D. 总线连接 2. 一下哪个协议不属于C/S模式() A. SNMP…

武汉星起航:亚马逊欧洲站潮流指南,满足年轻人选品需求

在充满活力的20-30岁年龄段&#xff0c;年轻人们充满朝气&#xff0c;追求时尚与品质&#xff0c;对生活充满无限期待。亚马逊欧洲站作为全球领先的电商平台&#xff0c;为这一年龄段的人群提供了丰富多样的商品选择。武汉星起航将为您介绍亚马逊欧洲站针对20-30岁人群的选品攻…

myCrayon个人博客项目基于springBoot+Vue全栈开发

目录 项目介绍 简介 项目架构 项目模块组成 数据库设计 项目展示 首页 用户登录与注册 个人信息模块 商城展示 博客模块 博客浏览 博客发布与编辑 博客搜索 社区模块 新闻模块 后台管理系统 部署方式 结语 项目介绍 简介 项目类似于CSDN&#xff0c;支持所…

2024年4家HTTP代理服务商网站最新测评

一、芝麻HTTP芝麻HTTP作为代理服务领域的佼佼者&#xff0c;其HTTP代理服务同样表现出色。凭借海量IP资源和高效稳定的性能&#xff0c;芝麻HTTP为用户提供了卓越的代理服务体验。 特点与优势 ① 海量IP资源&#xff1a;拥有庞大的代理IP池&#xff0c;确保用户能够随时获取到…

PostgreSQL 高级功能(五)

1. 存储过程与函数 1.1 创建存储过程 存储过程是一组预编译的SQL语句&#xff0c;可以简化复杂的操作。以下是一个简单的存储过程示例&#xff1a; CREATE OR REPLACE FUNCTION add_user(username VARCHAR, email VARCHAR) RETURNS VOID AS $$ BEGININSERT INTO users (use…

Django 自定义标签

1&#xff0c;简单标签 1.1 添加自定义标签函数 Test/app5/templatetags/mytags.py from django import template register template.Library() register.simple_tag() def show_title(value, n):if len(value) > n:return f{value[:n]}...else:return value 1.2 添加视…

C++中栈内存和堆内存的区别--实例说明

在C中&#xff0c;栈内存和堆内存是两种不同的内存分配方式。它们有着不同的使用场景和管理方式。以下是它们的主要区别&#xff1a; 栈内存&#xff08;Stack Memory&#xff09;&#xff1a; 栈内存是由编译器自动分配和释放的内存区域&#xff0c;用于存储函数的局部变量和函…