Java学习52-迭代器 iterator

迭代器 iterator

  1. 迭代器Iterator的作用?
    集合Collection是一个容器,是用来存储数据的。Iterator不是容器,是用来遍历现存的集合中的数据的。

2.如何选取迭代器Iterator对象?
Iterator iterator = coll.iterator();

3.如何实现遍历(代码实现)
while (iterator.hasNext()) { System.out.println(iterator.next()); // next()的作用 //1. 指针下移 //2. 将下移以后集合位置上的元素返回 }

举例

package Collection;import org.junit.Test;import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;public class IteratorTest {@Testpublic void test1(){Collection coll = new ArrayList();coll.add("AA");coll.add(123);//自动装箱coll.add("haha");coll.add(new Object());coll.add(new Person("Tome",12));// coll.iterator();然后按Alt+enter// 会自动生成下面这样“Iterator iterator = coll.iterator();”Iterator iterator = coll.iterator();//System.out.println(iterator.getClass());如果好奇 可以查一下iterator class/**//迭代读取方式一:System.out.println(iterator.next());System.out.println(iterator.next());System.out.println(iterator.next());System.out.println(iterator.next());System.out.println(iterator.next());//当iterator迭代器遍历的元素个数超出了实际元素范围,会报错System.out.println(iterator.next());//迭代读取方式2:可以用,实际一般使用方式3比较多for (int i = 0; i < coll.size(); i++) {System.out.println(iterator.next());}*** *///迭代读取方式3:(常用)while (iterator.hasNext()) {System.out.println(iterator.next());}/**//常见的错误写法举例://已知Collection内部元素为:// AA;123;haha;【java.lang.Object@1ef7fe8e】;Person{name='Tome', age=12}//错误写法1://下面这个写法,先判断AA是不是null,然后指针下移,输出123//然后判断haha是不是null,再指针下移,输出Object 【java.lang.Object@1ef7fe8e】//然后再判断Person{name='Tome', age=12} 是不是 null,再指针下移,输出内容,发现找不到内容于是报错System.out.println("下面是错误的举例:");while ((iterator.next() != null)) {System.out.println(iterator.next());}
*//错误写法2://这种写法会错误的一直输出AA,原因是第一次触发语句coll.iterator().hasNext()// coll.iterator()就会新建一个迭代器,返回一个新的迭代器对象,它的指针在第一个元素AA的“楼顶”--AA的上面,// 之后遇见语句coll.iterator().next(),此时虽然指针已经下移,正指向AA元素,但是coll.iterator()语句直接又会新建一个迭代器// 那个新的迭代器又将指针拉回了AA的“楼顶”,此时coll.iterator().next()语句输出的就是AA元素// 错误的根本就是每次都新建一个迭代器,然后自动将指针放在第一个元素AA的“楼顶”while (coll.iterator().hasNext()) {System.out.println(coll.iterator().next());}
* */}
}

运行结果:

AA
123
haha
java.lang.Object@6f79caec
Person{name='Tome', age=12}Process finished with exit code 0

4.增强for循环(for each循环)的使用(jdk5.0新特性)
常见的循环有 for
常见的循环有 while
常见的循环有 do while

4.1 作用
用来遍历数组,集合。

4.2 格式
for(<要遍历的集合或数组元素的类型> <临时变量名>:<需要便利的集合或数组变量>){ 自定义的临时变量输出语句 }

具体应用举例:

package Collection;import org.junit.Test;import java.util.ArrayList;
import java.util.Collection;public class ForEachTest {@Testpublic void forEachtest(){Collection coll = new ArrayList();coll.add("AA");coll.add(123);//自动装箱coll.add("haha");coll.add(new Object());coll.add(new Person("Tome",12));//for each循环或增强for循环的用法//for(【集合中元素的类型】【输出元素临时变量名】:【遍历的容器名】)//工作原理是每次把coll中取一个元素赋给e,然后对e做{}内相应的处理for(Object e : coll){System.out.print(e+"\n");}}@Testpublic void forArraytest(){int [] arr =new int[] {1,2,3,4,5,6};for (int a : arr) {System.out.print(a+"\n");}}@Testpublic void forStringtest(){String [] arr = new String []{"aaa","bbb","ccc","ddd","eee"};for (String e : arr) {System.out.println(e);}}
}

运行结果:

aaa
bbb
ccc
ddd
eeeProcess finished with exit code 0

4.3 说明

针对集合来讲,增强for循环的底层其实调用的是 iterator 迭代器。
增强for循环的执行过程中,是将集合或数组中的元素依次赋值给临时变量,注意,循环体中对临时变量的修改可能不会导致原有集合或数组中元素的修改。

常见错误示例(比如下面这个举例,并不能将“MM“赋值给arr):

package Collection;import org.junit.Test;public class ForEachErrorTest {@Testpublic void testFor(){String [] arr = new String [] {"AA","BB","CC","DD"};// 赋值操作// 注意这里的s仅仅是临时变量,s存储着指向arr每一个元素的地址,// 当给s赋值时,临时变量s舍弃了原来存储的地址,存入了“MM”for (String s : arr) {s= "MM";}//遍历输出//注意这里的s仅仅是临时变量,s存储着指向arr每一个元素的地址,// 正因为s仅仅是临时变量 此时的s和刚才被赋值了“MM”的s并不是同一个s,刚才的s在上个for循环结束时候已经被释放了// 此时s仍指向arr中每一个元素的地址,System.out.println就会输出arr中每一个元素的值for (String s : arr) {System.out.println(s);}} 
}

输出结果:

AA
BB
CC
DDProcess finished with exit code 0

下面这个例子,则使用传统的赋值方式,将“MM”赋值给了arr的每一个元素

package Collection;import org.junit.Test;public class ForEachErrorTest {@Testpublic void NormalForTest(){String [] arr = new String[]{"AA","BB","CC","DD"};for (int i = 0; i <  arr.length; i++) {arr[i] = "MM";}for (String e : arr) {System.out.println(e);}}
}

运行结果:

MM
MM
MM
MMProcess finished with exit code 0

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

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

相关文章

Hono 框架使用经验谈

Hono&#x1f525;是一个小型、快速并开源的 Serverless Web 框架&#xff0c;用 TypeScript 写就。它适用于任何JavaScript运行时&#xff1a;Cloudflare Workers&#xff0c;Fastly ComputeEdge&#xff0c;Deno&#xff0c;Bun&#xff0c;Vercel&#xff0c;Netlify&#x…

动手学操作系统(一、搭建实验环境)

动手学操作系统&#xff08;一、搭建实验环境&#xff09; 文章目录 动手学操作系统&#xff08;一、搭建实验环境&#xff09;1. 在VMware虚拟机中安装ubuntu20.042. 安装Bochs3. 启动计算机Reference &#x1f680; 环境配置 &#x1f680; 笔者的环境使用的是 ubuntu 20.04…

python多线程的使用

Python 多线程探索 在 Python 编程中&#xff0c;多线程是一项强大的技术&#xff0c;它允许我们同时执行多个任务&#xff0c;从而提高程序的效率和响应性。 一、线程的基本概念 线程是进程中的一个执行单元&#xff0c;可以与其他线程共享进程的资源。 二、创建线程 在 P…

HTML/JavaScript实现复制文本、复制HTML、复制图片功能

文章目录 复制文本复制HTML复制图片全代码 复制文本 navigator.clipboard.writeText 接收一个字符串参数&#xff0c;写入到剪贴板中。 <button onclick"copyText()">复制文本</button> <script> function copyText() {// navigator.clipboard.wri…

Linux:confluence8.5.9的部署(下载+安装+破ji)离线部署全流程

0.环境 Confluence也是比较吃运存了&#xff0c;我建议运行运存给到4g或者4g以上就可以了&#xff0c;核数可以给到1核或以上 我部署在centos7.9操作系统上&#xff0c;ip地址为&#xff1a;192.168.6.1&#xff0c;yum仓库使用的是自己的镜像文件&#xff0c;本章所有使用到…

爱普生XC1011SD为电气稳定控制系统组合式传感器推出解决方案

在现代电力系统中&#xff0c;确保系统的安全和稳定运行至关重要。为了应对这一需求&#xff0c;我们推出了XC1011SD组合式传感器解决方案&#xff0c;它专为电气稳定控制系统设计&#xff0c;提供了卓越的性能和可靠性。 XC1011SD是一款集成陀螺仪传感器和双轴加速度计于一体的…

炸裂!AI五分钟模仿爆款IP故事,涨粉速度太绝了!

‍ ‍大家好&#xff0c;我是向阳。 今天我要分享一个利用AI技术模仿爆款账号的小技巧&#xff0c;帮助大家迅速增加粉丝。这个方法简单实用&#xff0c;尤其适用于副业和本地生活领域。接下来&#xff0c;我将为大家详细讲解操作步骤。让我们开始吧。 副业赚钱&#xff1a;模…

合约构成-成员变量、函数、事件event、修饰器modifier及构造函数

合约的基本结构 合约中的成员变量合约中的成员函数Event&#xff08;事件&#xff09;、modifier(修饰器)与constructor&#xff08;构造函数:实例产生的时候执行&#xff09; Event事件 modifier construcor 1、成员变量 概念&#xff1a;存储合约状态的变量 声明方法&a…

北京证券公司港股通交易佣金手续费最低是多少?万0.8?港股通纳入规则是怎么样的?

港股通交易佣金概述 港股通的交易佣金可能会因证券公司和投资者的不同而有所差异。 北京证券公司的港股通交易佣金最低可能万分之零点八&#xff08;0.008%&#xff09;&#xff0c;但这需要投资者与证券公司客户经理了解&#xff0c;进行沟通和申请。 一般来说&#xff0c;…

git-将老项目的分支推送到新项目的新分支上

1.克隆新项目&#xff1a;首先&#xff0c;将新项目的仓库克隆到本地。使用以下命令将新项目克隆到本地&#xff1a; git clone <新项目的仓库地址> 2.进入新项目目录&#xff1a;进入新项目的目录&#xff0c;使用以下命令&#xff1a; cd <新项目目录> 3.添加旧项…

CSS学习笔记:Less

什么是Less&#xff1f; Less是一个CSS预处理器&#xff0c; Less文件后缀是.less 扩充了CSS 语言&#xff0c;使CSS具备一定的逻辑性、计算能力 可以通俗地理解&#xff1a;Less是一种更好用的CSS 注释 运算 嵌套 Less嵌套的作用&#xff1a;快速生成后代选择器 变量 问…

软考中级-软件设计师-真题详解【2023年上半年】

2023上半年真题记忆点详解 本片不涉及解题法&#xff0c;只整理记忆背诵点&#xff0c;记住即可拿分。 上午题部分&#xff1a; 片内总线&#xff1a;用于芯片内部各主要部件连接&#xff1b; 系统总线&#xff1a;用于CPU、主存、外设见的数据传输&#xff1b; 通讯总线&…

嵌入式LINUX开发成长计划

LINUX基础 嵌入式LINUX安装与环境配置完全指南-CSDN博客 基于ViutualBoxUbuntu(Linux)的开发环境搭建-CSDN博客 嵌入式LINUX常见符号与常用命令-CSDN博客 Git

04 FreeRTOS 队列(queue)

1、队列的特性 队列可以理解为一个传送带&#xff0c;一个流水线。 队列可以包含若干个数据&#xff1a;队列中有若干项&#xff0c;这被称为"长度"(length) 每个数据大小固定 创建队列时就要指定长度、数据大小 数据的操作采用先进先出的方法(FIFO&#xff0c;First…

使用 Python 管理串口通信:实现一个串口管理器

程序员老茶 &#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; P   S : 点赞是免费的&#xff0c;却可以让写博客的作者开心好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#…

干货分享 —— 如何开展web项目自动化测试!

前言 自动化(Automation)是指机器设备、系统或过程(生产、管理过程)在没有人或较少人直接参与的情况下&#xff0c;根据人的要求&#xff0c;通过自动检测、信息处理、分析判断、操纵和控制&#xff0c;达到预期目标的过程。自动化测试是指测试过程是在没有人为或较少人为干预…

milvus 中的集合与 database

在Milvus中&#xff0c;集合&#xff08;Collection&#xff09;和数据库&#xff08;Database&#xff09;是两个不同的概念&#xff0c;它们之间存在一定的关系。 1. 数据库&#xff08;Database&#xff09; 数据库是Milvus中的最顶层的组织单位&#xff0c;可以理解为一个…

从零构建vue3+ts+vite项目打包及项目依赖配置

❗️❗️❗️❗️ 写在最前: 本文是根据B站作者 月光分层 视频vuets 工程化配置以及作者笔记稍作整理 &#x1f496;&#x1f496;作者B站地址https://space.bilibili.com/14110850 &#x1f496;&#x1f496;视频教程地址vuets 工程化配置 &#x1f496;&#x1f496;作者微信…

【计算机毕业设计】安卓054基于Android校园助手

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

LAMP源码编译安装——CentOS7

文章目录 LAMP是什么LAMP软件组件LinuxApacheMySQLPHP 源码安装Apache一、准备工作二、安装环境依赖包三、配置软件模块四、编译及安装五、优化配置文件路径六、添加httpd系统服务&#xff08;有两种方法&#xff09;方法一&#xff1a;方法二&#xff1a; 七、修改httpd 服务配…