Java集合迭代器原理图解_Java Iterator接口遍历单列集合迭代器原理详解

这篇文章主要介绍了Java Iterator接口遍历单列集合迭代器原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

Iterator接口概述

在程序开发中,经常需要遍历集合中的所有元素。针对这种需求,JDK专门提供了一个接口java.util.Iterator 。 Iterator 接口也是Java集合中的一员,但它与 Collection 、 Map 接口有所不同,Collection 接口与 Map 接口主要用于存储元素,而 Iterator 主要用于迭代访问(即遍历) Collection 中的元素,因此 Iterator 对象也被称为迭代器。

迭代的概念

迭代:即Collection集合元素的通用获取方式。在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。

获取迭代器

Iterator迭代器,是一个接口,我们无法直接使用,需要使用Iterator接口的实现类对象,获取实现类的方式比较特殊Collection接口中有一个方法,叫iterator(),这个方法返回的就是迭代器的实现类对象Iterator iterator() 返回在此 collection 的元素上进行迭代的迭代器。

public Iterator iterator() : 获取集合对应的迭代器,用来遍历集合中的元素的。

Iterator接口的常用方法如下:

public E next() :返回迭代的下一个元素

public boolean hasNext() :如果仍有元素可以迭代,则返回 true。

迭代器的使用步骤

使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)

使用Iterator接口中的方法hasNext判断还有没有下一个元素

使用Iterator接口中的方法next取出集合中的下一个元素

代码举例

package demo02;

import java.util.ArrayList;

import java.util.Collection;

import java.util.Iterator;

public class Demo01Iterator {

public static void main(String[] args) {

//创建一个集合对象

Collection coll = new ArrayList<>();

//往集合中添加元素 自动装箱

coll.add(1);

coll.add(2);

coll.add(3);

coll.add(4);

/*

1.使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)

注意:

Iterator接口也是有泛型的,迭代器的泛型跟着集合走,集合是什么泛型,迭代器就是什么泛型

*/

//多态 接口 实现类对象

Iterator it = coll.iterator();

//2.使用Iterator接口中的方法hasNext判断还有没有下一个元素

while (it.hasNext()) {

//3.使用Iterator接口中的方法next取出集合中的下一个元素

System.out.println(it.next());

}

}

}

代码执行后的结果

8cbbf1dfc95a3c90877e4a34235ae45a.png

tips:在进行集合元素取出时,如果集合中已经没有元素了,还继续使用迭代器的next方法,将会发生java.util.NoSuchElementException没有集合元素的错误。

迭代器的实现原理

当遍历集合时,首先通过调用Collection集合的iterator()方法获得迭代器对象,然后使用hashNext()方法判断集合中是否存在下一个元素,如果存在,则调用next()方法将元素取出,否则说明已到达了集合末尾,停止遍历元素。Iterator迭代器对象在遍历集合时,内部采用指针的方式来跟踪集合中的元素,为了让初学者能更好地理解迭代器的工作原理,接下来通过一个图例来演示Iterator对象迭代元素的过程:

126316fde27a83eaec47aa64aea95ee4.png

在调用Iterator的next方法之前,迭代器的索引位于第一个元素之前,不指向任何元素,当第一次调用迭代器的next方法后,迭代器的索引会向后移动一位,指向第一个元素并将该元素返回,当再次调用next方法时,迭代器的索引会指向第二个元素并将该元素返回,依此类推,直到hasNext方法返回false,表示到达了集合的末尾,终止对元素的遍历。

增强for

增强for循环(也称for each循环)是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。 为什么集合和数组都可以使用增强for循环进行遍历?因为实现了只要实现了Iterable接口就允许对象成为 "foreach" 语句的目标。而Collectionextends Iterable这个接口,所以所有的单列集合都可以使用增强for。

作用:

它用于遍历Collection和数组。通常只进行遍历元素,不要在遍历的过程中对集合元素进行增删操作。

格式:

28f355823fbddd40cf2fddd77e1f13b1.png

代码举例

遍历数组

package demo02Iterator;

public class ForArray {

public static void main(String[] args) {

int[] arr = {3, 5, 6, 87};

//使用增强for遍历数组

for (int a : arr) {//a代表数组中的每个元素

System.out.print(a + " ");//3 5 6 87

}

}

}

遍历集合

package demo02Iterator;

import java.util.ArrayList;

import java.util.Collection;

public class ForArrayList {

public static void main(String[] args) {

//遍历集合

Collection coll = new ArrayList();

coll.add("小河神");

coll.add("老河神");

coll.add("神婆");

//使用增强for遍历

for (String s : coll) {

//接收变量s代表 代表被遍历到的集合元

System.out.print(s + " ");//小河神 老河神 神婆

}

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

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

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

相关文章

php商城的购物车功能,php实现购物车功能(以大苹果购物网为例)

首先是几个简单的登录页面登录用户名&#xff1a;密 码&#xff1a;登录页面写好之后&#xff0c;需要进入处理页面&#xff0c;从数据库中调出用户名和密码&#xff1a;session_start(); //开启session 必须要写到第一行header("Content-type:text/html;charsetutf-8&quo…

php的功能和特点,php的特点有哪些

PHP是一种服务器端、跨平台、html嵌入式的脚本语言执行速度快&#xff1a;PHP是一种强大的CGI脚本语言&#xff0c;语法混合了C、Java、Perl和PHP式的新语法&#xff0c;执行网页比CGI、Perl和ASP更快&#xff0c;这是它的第一个突出的特点。 (推荐学习&#xff1a;PHP视频教程…

php小程序码生成并保存,小程序中如何生成小程序码

导语&#xff1a;小程序是一种不需要下载安装即可使用的应用&#xff0c;它实现了应用“触手可及”的梦想&#xff0c;用户扫一扫或者搜一下即可打开应用。也体现了“用完即走”的理念&#xff0c;用户不用关心是否安装太多应用的问题。应用将无处不在&#xff0c;随时可用&…

php写不了php,php写入内存不足怎么办

php写入内存不足的解决办法&#xff1a;1、修改【php.ini】&#xff1b;2、在程序里面添加相关语句&#xff0c;代码为【ini_set(memory_limit, 12M)】&#xff1b;3、在根目录建立【.htaccess】文件。本教程操作环境&#xff1a;windows7系统、PHP5.6版&#xff0c;DELL G3电脑…

java 终态类,javaoo,继承,抽象类,终态类,访问修饰符!

java的继承&#xff01;Java的继承使用extends关键字&#xff01;为什么要使用继承呢&#xff1f;我们先来举例说明一下&#xff01;比如说&#xff01;烟是类&#xff01;而叶子烟&#xff0c;和纸烟&#xff0c;烟这个类包含了&#xff0c;叶子烟和纸烟这两个类&#xff0c;如…

php cdr,win10彻底禁止cdr联网

1、打开Win10电脑&#xff0c;然后按winPauseBreak&#xff0c;来到“系统”属性窗口&#xff0c;点击控制面板&#xff0c;如图所示&#xff1a;2、打开来到控制面板页面&#xff0c;鼠标单击“系统和安全”&#xff0c;如图&#xff1a;3、打开在“系统和安全”对话框中&…

微信 语音转文字 java,在微信——怎么将语音转化为文字,你需要学习了

有时候和好友在聊天&#xff0c;这时好友在微信上发来语音信息&#xff0c;可是你这个时候不方便听语音&#xff0c;那怎么办呢&#xff1f;这个是我们就可以运用微信的语音转文字的功能&#xff0c;那么如何使用这个功能呢&#xff1f;跟着小编看看吧&#xff01;操作方法01小…

php开发添加表情功能,WordPress网站评论区如何实现添加表情包功能?

做网站过程中&#xff0c;可以给自己的网站添加评论框&#xff0c;供用户评论。默认情况下&#xff0c;Wordpress网站评论框是没有添加表情功能的&#xff0c;那么WordPress网站评论区如何实现添加表情包功能&#xff1f;今天我们介绍一下如何给自己的Wordpress网站评论框添加表…

日冕物质抛射检测matlab,日冕图像论文,关于基于实时数据的日冕物质抛射自动检测方法相关参考文献资料-免费论文范文...

导读:本论文主要论述了日冕图像论文范文相关的参考文献,对您的论文写作有参考作用。(昆明理工大学信息与自动化学院,昆明 650504)(Faculty of Information Engineering and Automation,Kunming University of Science and Technology,Kunming 650504,China)摘 要&#xff1a;本…

link url下载php,php脚本生成google play url的下载链接,下载apk并自动反编译后获取android版本号...

php脚本生成google play url的下载链接&#xff0c;下载apk并自动反编译后获取android版本号需求:get the offer tracking linkfollow the redirect to get google play urlGo to http://apps.evozi.com/apk-downloader/Enter google play urlDownload APK fileDecompile APK f…

oracle单行子查询返回多个行 order by,单行子查询返回多个行 Issue分析求助

with order_base as --获取订单基础情况(select ou.order_key order_key, ou.order_quantity_i, ood.dispatch_time_t, ou.part_number_s, I032ZZ01 pline_name_sfrom order_uv ou left join at_as_om_orderdispatchstatus ood on ou.order_key ood.order_54union allselect m…

php按照名称搜索,PHP从类型和名称搜索

很抱歉,标题不好,但我不知道有更好的选择.目前,我正在创建一个搜索引擎以获取产品详细信息.我有2种搜索类型,第一种是使用产品类型进行搜索,另一种是使用产品名称进行搜索.这是搜索代码&#xff1a;$search_exploded explode (" ", $search);$x "";$cons…

简述oracle数据库特殊状态,【OracleDB】 01 概述和基本操作

实例概念&#xff1a;Oracle有一个特殊的概念Oracle数据库 数据库 Oracle文件系统 Oracle实例实例处理Oracle的请求&#xff0c;调用文件系统然后返回结果响应给客户端单实例和多实例一个数据库可以对应多个实例操作数据库服务这是Oracle数据库的服务&#xff0c;一定要安装…

oracle中affirm,2.Oracle Data Guard 参数介绍

Oracle Data Guard 参数介绍Data Guard作为Oracle提供的一个高可用及灾备解决方案,理解并可以实施它对于DBA来说是非常重要套的技能上节介绍了有关Data Guard的概念&#xff0c;这节将介绍相关的一些参数有的参数是做为备库角色时才生效的&#xff0c;会单独说出来1. DB_NAME该…

Linux单独编译设备树,迅为IMX6Q开发板-非设备树内核-单独编译内核驱动

内核驱动不仅可以将驱动编译到内核中&#xff0c;还可以动态的编译内核驱动。本文档介绍如何以模块的方式编译内核驱动。要动态的编译内核&#xff0c;首先需要将内核源码编译通过&#xff0c;内核的编译请参考使用手册第五章。9.5.2.1 内核和编译器路径本节介绍内核路径、编译…

win8关闭uefi+linux,UEFI启动是什么?Win8关闭UEFI引导方式的方法

UEFI启动是什么?不少新电脑都给用户直接预装了Win8系统&#xff0c;后来使用又非常不习惯&#xff0c;因此想改成Win7系统&#xff0c;但是在换系统之前&#xff0c;需要在BIOS下关闭UEFI引导方式&#xff0c;可能很多朋友都不懂该如何关闭UEFI启动项。针对这个问题&#xff0…

android listview自动加载更多,如何实现 Android ListView『上拉加载更多』?

ListView上拉加载更多的UI需求(1)向上滑动 ListView&#xff0c;当最后一个条目滚入屏幕时开始加载更多条目&#xff0c;在列表底部增加一个 footerView&#xff1a;一个 infinite progressBar&#xff0c;一个 textView 显示 “Loading...”&#xff1b;(2)根据数据加载的结果…

android安全性发展,Android未来发展 安全是重点

自2008年首部Android手机问世以来&#xff0c;谷歌智能手机方面的发展也开始高歌勇进&#xff0c;经过近8年的发展&#xff0c;Android已经成为市场上最大的移动互联网操作系统&#xff0c;市场占有率位居第一&#xff0c;虽然其竞争对手iOS步步紧逼&#xff0c;但是由于Androi…

android excel布局,Android实现仿excel数据表格效果

在没给大家分享代码之前&#xff0c;先给大家展示下效果图&#xff1a;1.activity/*** 采购需求* Created by Administrator on 2016/10/13.*/public class PurchaseRequireActivity extends BaseActivity implements PurchaseRequireView {Bind(R.id.appTitle)TextView appTit…

首款搭载鸿蒙os的设备,华为发布会配件汇总,首款搭载 鸿蒙OS 的设备来了

2020 年 10 月 30 日&#xff0c;华为召开 Mate40 系列发布会&#xff0c;正式发布 Mate40 系列手机。除了手机&#xff0c;本次发布会还发布了华为 Watch GT2 Pro 手表、华为 Sound 音箱等配件。以下是详细情况&#xff1a;华为智选智能摄像头 Pro该设备是首款搭载 HarmonyOS …