Java学习笔记-----用来迭代的iterable和iterator

2023-11-12

大家好,烦人的我又来了,小白今天已经更了两两篇博客了呀,但是感觉很充实,那么……开始这篇的内容吧

关于迭代,我先举个例子,大家应该都很喜欢玩角色扮演的游戏,那么现在该干什么呢……?
Java是面向对象的设计思想,第一步当然是设计类了,现在我设计一个英雄类 私有的数据是英雄名字、英雄等级和血量:

public class Hero {
	private String name;
	private int level;
	private int blood;
	public Hero(String name,int level,int blood) {
		this.name = name;
		this.level = level;
		this.blood = blood;
	}
//	@Override
	public String toString() {
		return String.format("名称:%s    等级:%d    血量:%d"
				, this.name, this.level, this.blood);
	}
}

还是为了设计方便,我还是重写了一次toString方法。

接下来设计一个list对象来存储英雄,之后设计一个方法来遍历list:

import java.util.*;

public class OperateInterable {
	public static void main(String [] args) {
		List <Hero> list = new ArrayList();
		Hero [] h = {
				new Hero("葛小伦",50,1000),
				new Hero("蔷薇",60,1100),
				new Hero("蕾娜",66,1400)
		};
		for(int i = 0;i < h.length;i++) {
			list.add(h[i]);
		}
		forEach(list);
		
	}
	static void forEach(List <Hero> list) {
		for(Hero h : list) {
			System.out.println(h.toString());
		}
	}
}

输出的结果大家应该也想得到,我就不详细解释了。

但是
(1)假如我现在想遍历一个set对象,那么需要对forEach方法进行重载
(2)要是想遍历一个queue对象,还需要进行重载
具体的代码如下:

static void forEach(Set <Hero> set) {
		for(Hero h : set) {
			System.out.println(h.toString());
		}
	}
	static void forEach(Queue <Hero> queue) {
		for(Hero h : queue) {
			System.out.println(h.toString());
		}
	}

但是,作为一个程序员,你能忍受重复这样的事情发生吗?反正我是忍不了。
那么,我们就要找到一个相对简单的方法,不管输入的对象是什么样的,都能遍历

这就到了iterable和iterator两个接口了。
list、set、queue都是继承接口collection ,JDK5之前collection类里面就有了iterator的定义,

那么我们使用iterator来写一段遍历的通用方法:

static void forEach(Collection <Hero> collection) {
		Iterator <Hero> iterator = collection.iterator();
		Hero hero;
		while(iterator.hasNext()) {
			hero = iterator.next();
			System.out.println(hero.toString());
		}
	}

这里面有几个需要强调的点:

1、根据多态的设计思路,设计传入的是collection类的可迭代(iterator)的类
2、上面说了,collection里面有iterator方法,所以创建iterator对象的时候直接调用
3、iterator.hasnext()方法是用来检查传 进来的对象是不是还有下一个对象,当有的时候返回true,要是没有下一个的话,就返回false
4、循环里面使用iterator.next()得到这个对象

在这里面我就偷点懒,直接使用泛型了,懒得使用对象的扮演(cast)了

那么调试一下:

public static void main(String [] args) {
		List <Hero> list = new ArrayList<>();
		Queue <Hero> queue = new ArrayDeque<>();
		Set <Hero> set = new HashSet<>();
		Hero [] h = {
				new Hero("葛小伦",50,1000),
				new Hero("蔷薇",60,1100),
				new Hero("蕾娜",66,1400)
		};
		for(int i = 0;i < h.length;i++) {
			list.add(h[i]);
			set.add(h[i]);
			queue.add(h[i]);
		}
		forEach(list);  System.out.println();
		forEach(queue);	System.out.println();
		forEach(set);	
	}

执行结果如下:
在这里插入图片描述
三种类型的对象都能进行输出,但是顺序是不太一样的,这个就和三种类型内部存储的方式有关了,至于是为什么,度娘找吧,我也不太清楚。

好了,对于iterator的理解就谈到这了,今天更了两篇博客,真的好开心呐,我会继续努力的,引用我同学的一句话:何为人才,不断学习,不断进步,方成人才。(不知道原话还不是这样的……)
大家,要为了自己美好的明天努力呀。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java学习笔记-----用来迭代的iterable和iterator 的相关文章

  • 无公网IP,如何进行私有化部署?

    私有化部署为什么越来越重要 网络地址资源稀缺 IPV4 IP段越来越稀少 公网IP比较昂贵且数量有限 运营商都将用户放到私有IP里去 这就让私有化部署成为了热门话题 那么企业部署服务到公网上 在没有公网IP的情况下该怎么实现呢 亦或者我们在
  • C语言,输入两个正整数,求这两个正整数的最大公约数和最小公倍数。

    输入两个正整数 求这两个正整数的最大公约数和最小公倍数 include
  • 【第66篇】深度学习在视频多目标跟踪中的应用综述

    文章目录 摘要 1 简介 2 MOT 算法 指标和数据集 2 1 MOT算法简介 2 2 指标 经典的指标 完整的MOT指标 ID 分数 2 3 基准数据集 3 MOT中的深度学习 3 1 深度学习中的检测步骤 3 1 1 Faster R
  • 集成测试、单元测试、系统测试之间的关系和区别

    目录 前言 什么是集成测试 什么是单元测试 什么是系统集成测试 集成测试与单元测试 系统测试与集成测试 总结 前言 为了使软件正常工作 所有单元都应集成在一起并正常运行 集成测试就像是要求不同工种的工人修建一个房子 希望他们都团结协作 如何
  • 【Linux】【Ubuntu 】Ubuntu 设置笔记本触摸板快捷键

    在笔记本上安装了Ubuntu 系统 但是不支持 Fn 键 本文提供一种方法 自定义快捷键关闭触摸板 文章目录 1 xinput 命令 1 1 查看 xinput 命令控制 TouchPad 的 id 1 2 xinput 命令开启或关闭 T
  • linux 浮动ip 出口,在Linux 双机下自己手动实现浮动ip技术

    两台Linux服务器 一台为主机 IP 124 158 26 30 对外提供了一定的网络服务 另一台从机 IP 124 158 26 31 能提供相同的服务 但ip地址没有对外部公开客户端连接的都是124 158 26 30这个ip地址 如
  • 模糊二维码数据集_CVPR 2019

    图像模糊是影响图像质量的重要因素 显着降低了许多计算机视觉应用的性能 例如物体检测和人脸识别 随着深度神经网络的发展 计算机视觉领域的难题被一个个解决 单纯依靠先验核去实现图像去模糊的技术已经渐渐被取代 本文将针对 CVPR2019 Uns
  • ChatGLM模型(服务器部署+微调)

    一 ChatGLM 6B在Linux上部署运行 1 部署 2 微调 3 推理 4 利用微调后的模型进行验证 5 参考博客 ChatGLM官方源码github地址 模型huggface地址 1 部署 1 1 部署前要先安装anaconda 我
  • yum安装软件时,出现"No package XXX available"的解决办法

    我的Linux版本6 8x64 依次执行以下命令解决 cd home wget http dl fedoraproject org pub epel 6 x86 64 epel release 6 8 noarch rpm rpm ivh
  • 6 FPGA时序约束理论篇之xdc约束优先级

    xdc约束优先级 在xdc文件中 按约束的先后顺序依次被执行 因此 针对同一个时钟的不同约束 只有最后一条约束生效 虽然执行顺序是从前到后 但优先级却不同 就像四则运算一样 x 都是按照从左到右的顺序执行 但x 的优先级比 要高 时序例外的
  • PCB设计中电流与线宽的关系

    除了温度 PCB的导线电流主要与铺铜厚度和线宽有关 嘉立创铺铜厚度为 1 盎司 0 0014 英寸 0 0356 毫米 mm 35 6um 1mm大约为40mil 40mil线宽三种铜厚情况下的电流大小为 35um 2 3A 50um 2
  • 启用计算机的fn键,联想 ThinkPad 笔记本 Fn 键 关闭与启用方法

    为适应部分用户的传统使用习惯 采用媒体功能键设计的笔记本电脑 BIOS中一般预留了热键模式切换开关 可通过切换开关来满足个人使用需要 1 电脑关机状态下 按下一键恢复按键 目前销售的联想笔记本电脑中 一键恢复按键多在电脑右侧 或左侧 以凹陷
  • first season fifteenth episode,does Chandler have dreams?

    Scene Central Perk Rachel is serving Joey Ross and Monica their drinks Rachel to Joey Coffee Hands it to him Joey Thank
  • 解决linux系统nginx重启失败问题

    端口被占用问题 nginx的默认端口为80端口 当我们的80端口被占用时 nginx无法启动成功 这时我们可以使用命令 netstat an grep 80 查看80端口的占用情况 于是 我们需要修改nginx的默认端口 通过命令进入ngi
  • “泰迪杯”数据分析职业技能大赛B题 学生校园消费行为分析---复盘

    1 赛题背景 校园一卡通是集身份认证 金融消费 数据共享等多项功能于一体的信息集成系统 在为师生提供优质 高效信息化服务的同时 系统自身也积累了大量的历史记录 其中蕴含着学生的消费行为以及学校食堂等各部门的运行状况等信息 很多高校基于校园一
  • EasyRecovery易恢复2023最新免费的电脑数据恢复软件

    EasyRecovery是一款非常专业的硬盘数据恢复工具 EasyRecovery拥有磁盘诊断 数据恢复 文件修复 E mail 修复等功能 有了EasyRecovery 你可以把误删 被破坏的文件 格式化的磁盘轻轻松松的找回来 小伙伴们可
  • AD如何修改3D视图时PCB板的颜色

    文章目录 前言 一 解决步骤 总结 前言 众所周知 AD 3D视图下默认是绿色板子 那我想改成其他颜色怎么办 一 解决步骤 其实很简单哈 我们就用最直接的方法 我们点击右下角这个LS旁边的红色框 注意不是点击LS哈 然后单击这两个绿色格子
  • 最全DOS的CMD命令,程序员必会

    转载 列宁的著作2021 09 05 10 54 16 文章标签DOSCMD命令行文件名实用程序文章分类代码人生阅读数207 CMD命令 开始 gt 运行 gt 键入cmd或command 在命令行里可以看到系统版本 文件系统版本 1 ap
  • Wget用法、参数解释的比较好的一个文章

    wget是一个从网络上自动下载文件的自由工具 它支持HTTP HTTPS和FTP协议 可以使用HTTP代理 所谓的自动下载是指 wget可以在用户退出系统的之后在后台执行 这意味这你可以登录系统 启动一个wget下载任务 然后退出系统 wg
  • FI(财务会计)模块简介

    一 财务会计系统主要特征及模型 一个有效的 现代的财务会计系统必须满足内部的和法定的会计面的要求 法定会计必须能够按有关规定向股东 债权人 劳工组织以及社会公众披露并提供所需的信息 而有效的公司管理会计必须包括控制和转移的功能 1 系统主要

随机推荐

  • 正确认识及掌握时间的用法

    前言 时间是一个相对地区而言的概念 因此有一个基准地区 就是本初子午线穿过的地区 了解世界时间相关的概念可以更好地协调全球人们的活动 便于跨越不同地区的时差 本初子午线 本初子午线指的是经过地球上经度为0度的那条线 也是国际日期变更线的起点
  • 亲密关系沟通-【情感勒索】建立良性沟通

    尊重对方的情绪 也应该判断对方的情绪是否合理 生活中情感勒索是很常见的 想要控制对方 我们可能都有做过这些行为 case 父母催婚 说女儿不孝顺 拒绝吃饭 情感勒索 case 男朋友不允许自己参加社团活动 不允许和其他男生接触 否则有自残行
  • G1垃圾收集器jvm参数设置

    堆内存最大最小值为4g 新生代内存2g Xms4g Xmx4g Xmn2g 元空间128m 最大320m XX MetaspaceSize 128m XX MaxMetaspaceSize 320m 开启远程debug Xdebug Xru
  • Java NIO(非阻塞IO) API介绍 .

    转载自 http blog csdn net daijialin article details 231384 在JDK 1 4以前 Java的IO操作集中在java io这个包中 是基于流的阻塞 blocking API 对于大多数应用来
  • 杭电OJ_(2043)密码

    Problem Description 网上流传一句话 常在网上飘啊 哪能不挨刀啊 其实要想能安安心心地上网其实也不难 学点安全知识就可以 首先 我们就要设置一个安全的密码 那什么样的密码才叫安全的呢 一般来说一个比较安全的密码至少应该满足
  • STL之vector的使用一(初始化vector)

    简介 vector可用于代替C中的数组 或者MFC中的CArray 从许多说明文档或者网上评论 一般一致认为应该多用vector 因为它的效率更高 而且具备很好的异常安全性 而且vector是STL推荐使用的默认容器 除非你知道你有特殊需要
  • 玩转ChatGPT:基于Mucloud建立本地知识库

    一 写在前面 人们普遍认为GPT有潜力颠覆教育行业 然而这种颠覆会以何种方式呈现呢 在刘慈欣的科幻世界中 三体人拥有知识遗传的能力 这使得他们的技术迭代成本降至最低 然而 我们人类并未具备这样的特性 每个新生命从出生之初就需要接受全新的教育
  • MarkDown中写UML图的方法

    目录 序 UML图之顺序图 顺序图的四个要素 关于消息箭头的语法 Mermaid中顺序图的简单例子 样例 用小人表示对象 为对象设置别名 激活对象 UML图之类图 类图中常见的关系 关于不同类型关系的语法 Mermaid中类图的简单例子 样
  • Python从菜鸟到高手(1):初识Python

    1 Python简介 1 1 什么是Python Python是一种面向对象的解释型计算机程序设计语言 由荷兰人吉多 范罗苏姆 Guido van Rossum 于1989年发明 第一个公开发行版发行于1991年 目前Python的最新发行
  • Verilog学习(2)运算符,赋值语句,块语句,条件语句,循环语句,生成块

    运算符 逻辑运算符 与 或 非 优先级高于 高于算术运算符 a gt b x gt y 可以写成 a gt b x gt y 一般还是加上括号 关系运算符 a b b 声明的关系是假的 返回0 优先级低于算术运算符 a b
  • mybatis 插入日期类型精确到秒的问题

    Mybatis 插入 数据库是为了防止插入空时报错 Mybatis 提供了一套机制 只要给定插入的字段的类型 如果为空 则它会自动处理为相应类型的默认值 ordercd jdbcType VARCHAR 我们都知道 Date类型是精确到时分
  • 【解决】NS3安装仿真可视化工具PyViz

    NS3安装仿真可视化工具PyViz 使用ns3软件版本是ns3 26 虚拟机系统Ubuntu16 04 问题 已经编译安装好ns3 并且也通过了测试 first second 等文件也可以正常编译 但是想用Pyviz看看图 运行命令sudo
  • 关于nginx proxy_pass指令’/’使用注意事项

    本文主要介绍了nginx代理配置完之后 nginx配置proxy pass 需要注意转发的路径配置 需要的朋友可以参考下 1 proxy pass配置说明 不带 代码如下 location test proxy pass http t6 8
  • Springboot中集成Prometheus

    目录 1 Prometheus基本原理和使用 2 Springboot中集成Prometheus 上文介绍了prometheus的基本原理和使用 本文将继续介绍如何在springboot中集成prometheus 基本配置 首先需要在spr
  • 提交微信小程序代码到微信代码管理git上

    背景 其实提交到github 码云 或者是 微信的git本质上没区别 这里只是想把微信的代码统一管理 所以决定放到微信的git上 创建远程项目 在微信开发管理工具上点击代码管理 完成用户名密码设定后 点击创建项目 纯英文路径 点击记入项目后
  • win10安装cuda10.2和对应的cudnn版本

    win10安装cuda10 2和对应的cudnn版本 查看自己电脑的显卡版本 1 点击 开始 键 打开NVIDIA控制面板 查看自己电脑的显卡版本 打开后点击 帮助 系统信息 组件 cuda安装 进入cuda官网 下载安装包 cuda官网
  • OpenCV代码提取:Windows上通过DShow获取Camera视频

    在OpenCV 3 1中获取视频的模块在videoio video input and output module 中 调用VideoCapture类接口 除了videoio模块外还依赖core highgui imgproc imgcod
  • 如何成为一名“受欢迎”的数据科学家和机器学习工程师

    机器学习项目交付实战 将介绍如何从模型和数据中获取最佳性能 帮助你构建稳定的数据管道 通过高效的可复用技术集合 来确保应用程序工作流程的顺利执行 以及提高模型的可维护性 基于数十年的良好软件工程实践 机器学习工程可确保你的机器学习系统具有弹
  • 虚拟机打不开github.com

    最近需要在虚拟机上用github的项目 但发现在虚拟机浏览器上打不开github网站 在终端执行 ping github com 返回的是localhost的数据包 在主机上用浏览器可以正常打开github网站 但是用cmd执行 ping
  • Java学习笔记-----用来迭代的iterable和iterator

    大家好 烦人的我又来了 小白今天已经更了两两篇博客了呀 但是感觉很充实 那么 开始这篇的内容吧 关于迭代 我先举个例子 大家应该都很喜欢玩角色扮演的游戏 那么现在该干什么呢 Java是面向对象的设计思想 第一步当然是设计类了 现在我设计一个