java的单例集合迭代器

news2025/1/15 6:30:08

迭代器Iterator

        根据之前的介绍我们知道,单例集合是由接口Collection定义的容器。Collection接口之下由定义了List接口和Set接口,其中List接口定义的容器的特征是有序可重复,而Set接口定义的容器的特征是无序不可重复的。

        List接口定义的容器的底层是通过数组来实现的,它的每一个容器中的元素都具有属于自己的索引,因此可以定义重复的元素,并且保证了元素的有序性。又由于List接口定义的容器中的元素都有下标,因此我们可以通过下标来对容器中的元素进行操作。如果我们要遍历容器中的元素就可以通过for循环来通过索引打印容器中的元素即可。

        与List接口定义的容器不同,Set接口定义的容器的底层是通过Hash算法来实现的,因此它的的元素是无序的,不可重复的。Set接口定义的容器中的元素是没有索引的,所以我们无法像List接口定义的容器那样通过索引来访问和操作Set接口定义的容器。因此在遍历Set接口定义的容器中的元素时,用for循环结构明显是行不通的。这里我们通常采用增强for循环来对Set接口定义的容器进行遍历操作,在介绍Set接口下的容器类时我们说过,增强for循环即for-each循环的本质就是迭代器,因此增强for循环既可以用来遍历Set接口下的容器,也可以用来遍历List接口下的容器。

        显然,通过上上面的简述我们能够发现,由于Set接口和List接口的实现方式不同它们对元素的操作方式是不同的,各个接口下的方法也是有区别的。但我们找到了一个共通之处那就是增强for循环的方式都能对这两个接口下的容器类进行遍历操作,因此我们推测是不是可以采用另一种方式也可以对这两个接口下的不同容器进行同一操作呢?答案是显然的,这个方式就是迭代器。

        java中的迭代器的接口是Iterator,在这个接口中定义了一个iterator的抽象方法。而我们介绍的单例集合接口Collection继承了这个接口,这也就意味着单例集合的具体实现类中都实现了抽象方法iterator。在单例集合的具体实现类中的iterator方法会返回一个Iterator系接口类型的迭代器对象,这个对象中定义了三个方法,通过这三个方法我们就可以对容器中的元素进行相关操作。这个三个方法分别是hashNext,next以及remove。它们的作用如下:

        boolean hashNext():判断游标当前位置是否有元素,如果有返回true,否则返回false;

        Object next():获取游标当前位置所指向的元素,并将游标移动到下一个位置;

        void remove():删除当前游标所指向的元素,当执行完next方法后,这个操作只能执行一次。

迭代器工作原理

        结合上面描述的三个方法我们就可以简单地描述出迭代器的工作原理了。在一个容器中,当我们使用迭代器来遍历元素时游标(也可以说是指针)首先会指向第一个元素,如果第一个元素不为空,那么此时方法hashNext会返回boolean类型的值true,而一旦hashNext方法返回值true后,就会调用next方法,next方法会取出游标指向的元素然后将游标移动到下一个元素的位置,然后又调用hashNext方法。重复上面描述的过程直到所有的元素都被取出后,游标指向的位置没有元素了,这时hashNext方法返回的值为false,不再调用next方法,容器中的元素就遍历完成了。

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

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

相关文章

发表在SIGMOD 2024上的高维向量检索/向量数据库/ANNS相关论文

前言 SIGMOD 2024会议最近刚在智利圣地亚哥结束,有关高维向量检索/向量数据库/ANNS的论文主要有5篇,涉及混合查询(带属性或范围过滤的向量检索)优化、severless向量数据库优化、量化编码优化、磁盘图索引优化。此外,也…

btrace使用记录

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 未经允许不得转载 目录 一、导读二、使用三、 推荐阅读 一、导…

技术管理转型之战:解锁管理新境界——直觉决策的艺术与科学

文章目录 引言一、直觉决策的定义与特点二、直觉决策在管理中的价值三、直觉决策的来源1、潜意识的心里过程2、基于价值观或道德的决策3、基于经验的决策4、影响发动的决策5、基于认知的决策 四、如何培养直觉决策能力五、直觉决策的风险与应对结语 引言 在快速变化的商业环境…

【论文阅读】场景生成及编辑3D定位论文阅读

<div id"content_views" class"htmledit_views" style"user-select: auto;"><div class"kdocs-document"> 前置知识 归纳偏置 关于归纳偏置的理解&#xff1a;首先推荐一篇解释归纳偏置非常好的博客&#xff1a;浅谈归纳…

mac苹果窗口辅助工具:Magnet for mac 2.14.0中文免激活版

Magnet 是一款针对 MacOS 系统的窗口管理工具软件。它能够帮助用户更加高效地管理和组织桌面上的窗口&#xff0c;通过简单的快捷键操作&#xff0c;可以将窗口自动调整到指定的位置和大小&#xff0c;实现多窗口快速布局。Magnet 还支持多显示器环境下的窗口管理&#xff0c;可…

Redis协议规范简介

Redis客户端使用为名为RESP&#xff08;Redis序列化协议&#xff09;的协议与Redis服务器进行通信。虽然该协议是专门为Redis设计的&#xff0c;但它也可以用于其他的CS软件项目的通信协议。 RESP可以序列化不同的数据类型&#xff0c;如整型&#xff0c;字符串&#xff0c;数…

【漏洞复现】畅捷通T+ keyEdit.aspx SQL漏洞

0x01 产品简介 畅捷通 T 是一款灵动&#xff0c;智慧&#xff0c;时尚的基于互联网时代开发的管理软件&#xff0c;主要针对中小型工贸与商贸企业&#xff0c;尤其适合有异地多组织机构(多工厂&#xff0c;多仓库&#xff0c;多办事处&#xff0c;多经销商)的企业&#xff0c;…

【华东南AWDP】第十七届全国大学生信息安全竞赛 CISCN 2024 创新实践能力赛区域赛 部分题解WP

前言&#xff1a;这次区域赛AWDP安恒作为支持&#xff0c;赛制风格遵循安恒&#xff0c;一小时check一次。室温35在室内坐了8小时&#xff0c;午饭是藿香正气水拌冰水。这场总体下来中规中矩吧。 WEB-welcome-BREAK CtrlU拿到flag WEB-submit-BREAK 文件上传&#xff0c;简单…

sql server 非sa账号配置发布订阅

如果有些源端环境&#xff0c;sa账号被禁用&#xff0c;或者有其他问题&#xff0c;那可以按以下步骤操作。 使用高权限账户登录&#xff0c;另外需要拥有源端windows用户管理员的账号和密码 表发布订阅成功的前提&#xff1a;发布的表必须有主键。 创建一个专门用于发布订阅的…

卤货商家配送小程序商城是怎样的模式

无论生意大小、打造品牌都是必要的一步&#xff0c;只要货品新鲜、味道高、性价比高&#xff0c;其新客转化/老客复购数量都不少&#xff0c;卤货种类多且复购多个单独/聚会场景&#xff0c;以同城主要经营&#xff0c;也有部分品牌有外地食品配送需要。 想要进一步品牌传播、…

多线程与高并发- Synchronized锁

简介 synchronized 是 Java 语言的一个关键字&#xff0c;它允许多个线程同时访问共享的资源&#xff0c;以避免多线程编程中的竞争条件和死锁问题。synchronized可以用来给对象或者方法进行加锁&#xff0c;当对某个对象或者代码块加锁时&#xff0c;同时就只能有一个线程去执…

Spring Cache常见问题解决

目录 一 报错:Null key returned for cache operation 二 报错&#xff1a;类型转换异常 三 取出的数据为null 一 报错:Null key returned for cache operation 这里报错有两种情况&#xff1a; 第一&#xff0c;如果你在新增的方法上使用Cacheable注解&#xff0c;那么肯定是…

chat使用

1.问题&#xff0c;Youve hit your usage limit. Please try again later. 2024年6月22号&#xff0c;提示达到使用限制次数。 一直用免费的&#xff0c;第一次遇见这个提示。 据说月初会重置。 感觉这个月也没有用多少次&#xff0c;怎么就达到限制了。 还有就是&#…

godot所有2D节点介绍

五十个2D节点介绍 2D节点介绍 前言一、Node2D二、sprite2D三、AnimatedSprite2D四、Camera2D五、PhysicsBody2D六、 RigidBody2D七、CharacterBody2D八、StaticBody2D九、joint2D十、DampedSpringJoint2D十一、GrooveJoint2D十二、PinJoint2D十三、Area2D十四、AnimatableBody2…

day3-xss漏洞(米斯特web渗透测试)

day3-xss漏洞&#xff08;米斯特web渗透测试&#xff09; XSSXss种类三种反射型1.反射型xss2.存储型xss3.DOM型xss XSS Xss有一部分是前端的有一部分不是前端的&#xff0c;我们来看一下&#xff0c;昨天的HTML注入修复方法应灵活使用。 HTML注入是注入一段HTML&#xff0c;那…

android studio 模拟器文件查找

android studio 模拟器文件查找 使用安卓模拟器下载文件后通常无法在系统硬盘上找到下载的文件&#xff0c;安卓 studio studio 其实提供了文件浏览工具&#xff0c;找到后可以直接使用 Android studio 打开 打开 Android studioview 菜单view > Tool Windows > Device…

三阶段复习

6.21 静态库与动态库 库有两种&#xff1a;静态库&#xff08;.a、.lib&#xff09;和动态库&#xff08;.so、.dll&#xff09;。所谓静态、动态是指链接。静态库在链接期把整个库文件都拷贝到可执行文件中&#xff0c;而动态库在链接期只是把索引文件拷贝到可执行文件中&…

数据结构~~时间、空间复杂度

目录 一、什么是数据结构 什么是算法 算法的复杂度 二、时间复杂度 三、空间复杂度 四、总结 一、什么是数据结构 数据结构(Data Structure)是计算机存储、组织数据的方式&#xff0c;指相互之间存在一种或多种特定关系的 数据元素的集合。 数据结构关注的是数据的逻辑结…

爬虫笔记14——爬取网页数据写入MongoDB数据库,以爱奇艺为例

下载MongoDB数据库 首先&#xff0c;需要下载MongoDB数据库&#xff0c;下载的话比较简单&#xff0c;直接去官网找到想要的版本下载即可&#xff0c;具体安装过程可以看这里。 pycharm下载pymongo库 pip install pymongo然后在在python程序中我们可以这样连接MongoDB数据库…

继电器十大品牌供应商

继电器是常用的元器件之一&#xff0c;如下是优秀供应商。 继电器品牌-中间继电器品牌-安全继电器品牌-固态继电器哪个品牌比较好-Maigoo品牌榜