java: Iterator的使用

article/2025/9/19 8:34:08

本文以ListIterator为例,其他的Iterator使用基本相同。

注意,Iterator不指向任何元素,它指向的是元素的间隔。

如图:方块内是List中的元素,圆圈内是Iterator。

在这里插入图片描述
iterator的cursor标识了它的位置。

一、获取ListIterator

ListIterator<Integer>itr = sums.listIterator();

        LinkedList<Integer> nums = new LinkedList<Integer>();for(int i = 0; i < 10; ++i) nums.add(i);ListIterator<Integer> itr = nums.listIterator();

listIterator()方法返回一个cursor为0的Iterator;
在遍历中,cursor: 0 → \rightarrow 1 → \rightarrow 2 → \rightarrow 3 → \rightarrow 4 → \rightarrow 5 → \rightarrow 6 → \rightarrow 7 → \rightarrow 8 → \rightarrow 9 → \rightarrow 10

二、使用next()正序遍历

        for(ListIterator<Integer>i = nums.listIterator();i.hasNext();)System.out.print(i.next()+" ");//0 1 2 3 4 5 6 7 8 9 

next的作用:返回iterator的下一个元素所指的值,并使iterator前进一步。

在这里的例子中,假如i当前cursor为0,i.next()的返回值是1,执行完i.next()后,i的cursor为1

三、使用previous()逆序遍历

        ListIterator<Integer> itr = nums.listIterator();for(;itr.hasNext();) itr.next();for(;itr.hasPrevious();)System.out.print(itr.previous()+" ");//9 8 7 6 5 4 3 2 1 0 

尴尬的是,LinkList并没有提供指向链表尾端的指针。所以需要先正向遍历之后,才能把itr定位到尾部。

这里的previous与前面的next效果基本是相对的。

previous()的作用: 返回后一个元素,并使iterator回退一步

在这个例子中,当itr的cursor为9时,它的下一个元素是9,itr的返回值为9,并且执行完itr.previous()之后,itr的cursor为8

四、使用set()修改元素的值

修改的是上一次执行next()或者previous()返回的元素。

假如该iterator从未执行过next()或者previous(),set()会报错。

        LinkedList<Integer> nums = new LinkedList<Integer>();for(int i = 0; i < 10; ++i) nums.add(i);ListIterator<Integer> itr = nums.listIterator();itr.next();itr.set(100);for(int item: nums) System.out.print(item+" ");//100 1 2 3 4 5 6 7 8 9 

五、使用add()添加元素

当cursor为n时,新添加的元素应该在第n-1和第n个元素之间。

举例: 在表头依次添加1,2,3,4,5(当然,最终添加的顺序应该是5、4、3、2、1)

        LinkedList<Integer> nums = new LinkedList<Integer>();for(int i = 0; i < 10; ++i) nums.add(i);for(int i = 1; i <= 5; ++i) nums.listIterator().add(i);for(int item: nums) System.out.print(item+" ");//5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 

六、使用remove()删除当前节点

举例:删除表头元素
类似set(),也是对上一次next()或者previous()的返回值执行删除操作。

        LinkedList<Integer> nums = new LinkedList<Integer>();for(int i = 0; i < 10; ++i) nums.add(i);ListIterator<Integer> itr = nums.listIterator();itr.next();itr.remove();for(int item: nums) System.out.print(item+" ");//1 2 3 4 5 6 7 8 9 

http://chatgpt.dhexx.cn/article/rA56nX1V.shtml

相关文章

使用Iterator遍历map以及list用法

Iterator接口简介&#xff1a; Java中的Iterator**功能比较简单&#xff0c;只能单向移动&#xff1a;   (1) 使用方法iterator()要求容器返回一个Iterator。    Iterator iter list.iterator(); // 注意iterator&#xff0c;首字母小写    第一次调用Iterator的next()方…

DataSet与Iterator用法总结

参考文章: TensorFlow全新的数据读取方式:Dataset API入门教程 TensorFlow 利用Dataset读取和构建数据 【Tensorflow】Dataset 中的 Iterator 一、基本概念 1.DataSet 简单来说,Dataset可以看作是相同类型“元素”的有序列表,其中,单个“元素”可以是向量,也可以是字符串…

iterator在vector中的使用

iterator在vector中的使用 iterator也被称为迭代器&#xff0c;可以指向一个范围内&#xff08;如queue、vector、set等等&#xff09;的元素&#xff0c;与指针类似。迭代器分为五个不同的类别&#xff0c;输入、输出、向前、双向、随机访问。 在vector中的迭代器属于随机访问…

Java中Iterator用法整理

迭代器&#xff08;Iterator&#xff09; 迭代器是一种设计模式&#xff0c;它是一个对象&#xff0c;它可以遍历并选择序列中的对象&#xff0c;而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象&#xff0c;因为创建它的代价小。 Java中的Iterator功能…

c++ 的map、iterator用法

https://blog.csdn.net/bangdingshouji/article/details/73028424 参考&#xff1a; 资料一&#xff1a;http://www.cplusplus.com/reference/iterator/&#xff08;第一参考&#xff0c;简单精要&#xff09;资料二&#xff1a;http://jjhou.boolan.com/programmer-3-traits…

Iterator用法

Interator迭代集合&#xff0c;可以进行remove操作。 public class Test {public static void main(String[] args) {List<String> lists new ArrayList<>();lists.add("Sam");lists.add("Tom");lists.add("David");lists.add(&qu…

Java迭代器(Iterator)的用法

Java迭代器&#xff08;Iterator&#xff09;的用法 什么是IteratorIterator的应用 什么是Iterator Iterator(迭代器)&#xff0c;它是一种用于访问集合的方法&#xff0c;可用于迭代 ArrayList 和 HashSet 等集合(或者也可以说成&#xff0c;遍历并选择序列中的对象)。 Iter…

浅谈MySQL数据库的设计流程

系列文章目录 本次文章的内容是记录有关于MySQL学习中对数据库设计流程的一个记录和在设计流程中需要注意的一些事情。 文章目录 系列文章目录前言一、数据库设计1.1为什么要着重于对数据库的详细设计1.2数据库的设计流程&#xff08;1&#xff09;根据应用系统的功能&#xf…

数据库设计说明书

目录 1引言 1.1编写目的 1.2背景 1.3定义 1.4参考资料 2外部设计 2.1标识符和状态 2.2使用它的程序 2.3约定 2.4专门指导 2.5支持软件 3结构设计 3.1概念结构设计 3.2逻辑结构设计 3.3物理结构设计 4运用设计 4.1数据字典设计 4.2安全保密设计 数据库设计说明…

MySQL之数据库设计六个步骤

前言 今天有个前同事去面试&#xff0c;被面试官问了一个这样的问题&#xff1a;如果让你去设计数据库你改怎么设计&#xff1f;或者有哪些步骤&#xff1f;被问到这里可能我们就懵逼了&#xff0c;是啊&#xff0c;该怎么去设计呢。 在软件开发的过程中&#xff0c;数据库设…

用mysql设计数据库的步骤_数据库设计的主要步骤是什么

数据库设计的主要步骤是什么 发布时间&#xff1a;2020-08-12 10:00:24 来源&#xff1a;亿速云 阅读&#xff1a;141 作者&#xff1a;小新 这篇文章给大家分享的是有关数据库设计的主要步骤是什么的内容。小编觉得挺实用的&#xff0c;因此分享给大家做个参考。一起跟随小编过…

关系数据库设计步骤

看这篇文章之前&#xff0c;希望大家能够对数据库系统、数据模型有知识储备&#xff0c;如果有疑惑可以看我的另外一篇博客数据库系统。 还需要对关系型数据库基础知识有所了解&#xff0c;有疑惑朋友可以看关系型数据库基础知识 文章目录 数据库设计的步骤概念结构设计E-R模型…

数据库设计步骤(超级详细)|数据库

数据库设计 我们先来看这样一个问题 假如遇到下面这样的设计需求&#xff0c;我们如何完成数据库的设计呢&#xff1f; 设计需求&#xff1a; 假设商品经销商有基本实体集&#xff1a;供应商Vendors、产品目录Products、顾客信息Customers和顾客订单Orders。 各个实体的属性集…

nginx跨域|配置nginx跨域详解

在项目的nginx配置目录中&#xff0c;添加如下命令即可解决跨域问题&#xff0c;亲测有效。 # $http_origin动态获取请求客户端请求的域 不用*的原因是带cookie的请求不支持*号 add_header Access-Control-Allow-Origin $http_origin; # 表示请求头的字段 动态获取 add_head…

nginx跨域配置步骤

假设接口服务器地址&#xff1a;http://192.168.2.1:8081 1、先查看接口本身是否能调通&#xff08;随便找个get接口在浏览器测试下&#xff0c;如&#xff1a;http://192.168.2.1:8081/testmanage/test/deleteTest&#xff09; 2、找到nginx的压缩目录&#xff0c;修改conf/…

Nginx跨域配置详解

一、概念 Ningx,是轻量级、开源的web服务器&#xff0c;具有高性能的HTTP和反向代理服务器&#xff0c;同时也是一个IMAP/POP3/SMTP代理服务器。 优势&#xff1a; 以事件驱动的方式编写&#xff0c;使其具有高并发高性能可扩展性好热部署 应用场景 静态资源服务&#xff0…

CORS解决跨域问题(Nginx跨域配置)

背景&#xff1a; 同域&#xff1a;域名&#xff08;父域名和子域名都相同&#xff09;&#xff0c;端口&#xff0c;协议都相同 跨域&#xff1a;非同域的请求 问题&#xff1a; 浏览器上&#xff0c;我们访问127.0.0.1:80&#xff0c;但是127.0.0.1:80 会去请求127.0.0.1:…

Nginx配置反向代理解决跨域问题

通过Nginx配置反向代理结果跨域问题 第一步&#xff1a;下载Nginx 一、下载 官网下载地址&#xff1a;http://nginx.org/en/download.html 我下载的版本&#xff1a;http://nginx.org/download/nginx-1.15.2.zip &#xff08;我也是参考网上的步骤&#xff0c;所以下载的不是…

Nginx配置跨域及解析

一、代码 先放上nginx配置代码 # 以代理百度地图api为例location /mymap/ {proxy_pass http://api.map.baidu.com/;# 配置跨域代理 add_header Access-Control-Allow-Origin $http_origin;add_header Access-Control-Allow-Methods GET,POST,OPTIONS…