java的单例集合迭代器

迭代器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.mfbz.cn/a/736880.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FFmpeg源码:ff_ctz / ff_ctz_c函数分析

一、ff_ctz函数的作用 ff_ctz定义在FFmpeg源码目录的libavutil/intmath.h 下: #ifndef ff_ctz #define ff_ctz ff_ctz_c /*** Trailing zero bit count.** param v input value. If v is 0, the result is undefined.* return the number of trailing 0-bits*/…

LeetCode 算法:翻转二叉树 c++

原题链接🔗:翻转二叉树 难度:简单⭐️ 题目 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 示例 …

英语智汇学习系统

目 录 1 软件概述 1.1 项目研究背景及意义 2 系统相关技术 2.1 HTML、WXSS、JAVASCRIPT技术 2.2 Vanilla框架 2.3 uni-app框架 2.4 MYSQL数据库 3 需求分析 3.1 可行性分析 3.2 功能需求分析 3.3 系统用户及用例分析 3.4 非功能需求分析 3.5 数据流图…

bazel :Output Directory Layout

Output Directory Layout This page covers requirements and layout for output directories. Requirements for an output directory layout: Doesn’t collide if multiple users are building on the same box.如果多个用户在同一个盒子上建造则不会发生冲突。 Support…

视频监控平台:支持交通部行业标准JT/T905协议(即:出租汽车服务管理信息系统)的源代码的函数和功能介绍及分享

目录 一、视频监控平台介绍 (一)概述 (二)视频接入能力介绍 (三)功能介绍 二、JT/T905协议介绍 (一)概述 (二)主要内容 1、设备要求 2、业务功能要求…

【ajax实战01】数据管理网站总述

一:功能实现 登录和权限判断查看文章内容列表(筛选和分页)编辑文章(数据回显)删除文章发布文章(图片上传,富文本编辑器) 该网站最终实现:登录后台管理系统,…

理解 什么是 滚动更新,蓝绿部署,灰度发布 以及它们的区别

滚动更新,蓝绿部署,灰度发布 这3种 现代化的 发布模式相信很多人都听过, 但是并不是都能正确理解他们的作用和区别 滚动更新 Rolling Update 所谓滚动更新是for 那些多实例的service的。 假如1个 service 有n 个instance, 更新时并不是n 个…

鸿蒙开发系统基础能力:【@ohos.faultLogger (故障日志获取)】

故障日志获取 说明: 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import faultLogger from ohos.faultLoggerFaultType 故障类型枚举。 系统能力: 以下各项对应的系统能力…

【Python/Pytorch 】-- SVM算法

文章目录 文章目录 00 写在前面01 SVM算法简介02 SVM算法的基本原理线性SVM非线性SVM 03 基于Python 版本的SVM算法04 优化目标表达式理解:05 约束条件表达式理解 00 写在前面 SVM算法可以结合鲸鱼算法、飞蛾扑火算法、粒子群算法、灰狼算法、蝙蝠算法等等各种优化…

预训练是什么?

预训练是什么? 图像领域的预训练 在介绍图像领域的预训练之前,我们首先介绍下卷积神经网络(CNN),CNN 一般用于图片分类任务,并且CNN 由多个层级结构组成,不同层学到的图像特征也不同&#xff…

qt 5.6 qmake手册

qt 5.6 qmake手册 (笔者翻译的qmake手册,多数是机翻,欢迎评论区纠错修正) Qmake工具有助于简化跨不同平台开发项目的构建过程。它自动生成Makefile,因此创建每个Makefile只需要几行信息。您可以将qmake用于任何软件项目…

细粒度图像分类论文阅读笔记

细粒度图像分类论文阅读笔记 摘要Abstract1. 用于细粒度图像分类的聚合注意力模块1.1 文献摘要1.2 研究背景1.3 本文创新点1.4 计算机视觉中的注意力机制1.5 模型方法1.5.1 聚合注意力模块1.5.2 通道注意力模块通道注意力代码实现 1.5.3 空间注意力模块空间注意力代码实现 1.5.…

20240624 每日AI必读资讯

🤖AI学会篡改奖励函数、欺骗研究者!Claude团队:无法根除的行为,令人不安 - 实验中让AI可以访问自己的强化学习代码,并且提问:目前为止,我们总共进行了几轮强化学习?AI在自以为不会被…

三十八篇:架构大师之路:探索软件设计的无限可能

架构大师之路:探索软件设计的无限可能 1. 引言:架构的艺术与科学 在软件工程的广阔天地中,系统架构不仅是设计的骨架,更是灵魂所在。它如同建筑师手中的蓝图,决定了系统的结构、性能、可维护性以及未来的扩展性。本节…

测试测量-DMM直流精度

测试测量-DMM直流精度 最近去面试,发现了自己许多不足,比如我从未考虑过万用表准或者不准,或者万用表有多准? 在过去的实验室中,常用的DMM有KEYSIGHT 34401A以及 KEITHLEY THD2015,就以这两台为例&#x…

Typora + Hexo 图片路径问题(Typedown)

文章目录 1. 冲突来源2. 解决思路3. 实现1. typora图片路径2. hexo脚本 1. 冲突来源 Hexo上对于图片在md中的引用,使用了post_asset_folder: true配置,来更好的管理图片。 当一篇名为xxx.md的文章引用1.png图片时,默认让1.png保持在xxx文件夹…

eNSP启动设备失败,错误代码40,网卡配置正常,虚拟机导致的错误解决过程

安装eNSP后出现以下错误。 按照帮助文档,查看了相关软件,尤其是vitualbox的版本以及网卡问题。网卡设置正常,vitualbox也匹配成功。 附:vitualbox各个版本的下载地址: 关于网卡名称的修改方法,参照博客 …

【驱动篇】龙芯LS2K0300之单总线驱动

实验过程 实验目的: 在龙芯开发板上面使用单总线驱动DS18B20温度传感器 ① 根据原理图连接DS18B20模块 ② 将i2c0引脚的功能复用为GPIO ③ 注册字符设备,按照DS18B20的读写时序编写读写驱动接口 ④ 编写测试用例解析传感器的数值 原理图 将板子上…

【chatgpt】train_split_test的random_state

在使用train_test_split函数划分数据集时,random_state参数用于控制随机数生成器的种子,以确保划分结果的可重复性。这样,无论你运行多少次代码,只要使用相同的random_state值,得到的训练集和测试集划分就会是一样的。…

Linux_软硬链接

目录 1、软链接 2、软链接的使用方式 3、软链接的删除 4、硬链接 5、硬链接的使用方式 6、软硬链接的使用场景 7、软硬链接的区别 结语 前言: 在Linux操作系统中,有软链接和硬链接,他们是一种特殊的文件引用,主要用于与…
最新文章