目录

  • Iterator接口 java.util.Iterator
  • 迭代器的实现原理
  • for each (内置迭代器)

Iterator接口 java.util.Iterator

在程序开发中,经常需要遍历集合中的所有元素。Iterator接口也是Java集合中的一员,但它与CollectionMap接口有所不同,Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象也被称为迭代器。

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

想要遍历Collection集合,那么就要获取该集合迭代器完成迭代操作,下面介绍一下获取迭代器的方法:

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

Iterator接口的常用方法如下:

  • public E next():返回迭代的下一个元素。
  • public boolean hasNext():如果仍有元素可以迭代,则返回 true。

e.g.:

public class IteratorDemo {public static void main(String[] args) {// 使用多态方式 创建对象Collection<String> coll = new ArrayList<String>();// 添加元素到集合coll.add("Michael");coll.add("Jack");coll.add("kite");//遍历//使用迭代器 遍历   每个集合对象都有自己的迭代器Iterator<String> it = coll.iterator();//  泛型指的是 迭代出 元素的数据类型while(it.hasNext()){ //判断是否有迭代元素String s = it.next();//获取迭代出的元素System.out.println(s);}}
}

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

迭代器的实现原理

我们在之前案例已经完成了Iterator遍历集合的整个过程。当遍历集合时,首先通过调用t集合的iterator()方法获得迭代器对象,然后使用hashNext()方法判断集合中是否存在下一个元素,如果存在,则调用next()方法将元素取出,否则说明已到达了集合末尾,停止遍历元素。

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

for each (内置迭代器)

增强for循环(也称for each循环)是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。

格式:

for(元素的数据类型  变量 : Collection集合or数组){ //写操作代码
}

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

e.g.:

public class NBForDemo1 {public static void main(String[] args) {int[] arr = {3,5,6,87};//使用增强for遍历数组for(int a : arr){//a代表数组中的每个元素System.out.println(a);}}
}

e.g.:

public class NBFor {public static void main(String[] args) {        Collection<String> coll = new ArrayList<String>();coll.add("Mick");coll.add("Jack");coll.add("Kite");//使用增强for遍历for(String s :coll){//接收变量s代表 代表被遍历到的集合元素System.out.println(s);}}
}

Tips: 新for循环必须有被遍历的目标。目标只能是Collection或者是数组。新式for仅仅作为遍历操作出现。

Java:Lterator迭代器相关推荐

  1. java集合 — — lterator迭代器

    二.lterator迭代器 2.1.Iterator接口 在程序开发中,经常需要遍历集合中的所有元素.针对这种需求,JDK专门提供了一个接口.java.util.Iterator.Iterator 接 ...

  2. java基础-迭代器(Iterator)与增强for循环

    java基础-迭代器(Iterator)与增强for循环 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Iterator迭代器概述 Java中提供了很多个集合,它们在存储元素时 ...

  3. java for 迭代器_Java基础-迭代器Iterator与语法糖for-each

    迭代器Iterator与语法糖for-each 一.为什么需要迭代器 设计模式迭代器 迭代器作用于集合,是用来遍历集合元素的对象.迭代器不是Java独有的,大部分高级语言都提供了迭代器来遍历集合.实际 ...

  4. java使用迭代器删除元素_使用Java从地图中删除元素

    java使用迭代器删除元素 关于从Java中的Map删除元素的非常简短的文章. 我们将专注于删除多个元素,而忽略了您可以使用Map.remove删除单个元素的Map.remove . 以下Map将用于 ...

  5. java设计模式迭代器模式_迭代器设计模式示例

    java设计模式迭代器模式 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式 ...

  6. java设计模式迭代器模式_Java中的迭代器设计模式–示例教程

    java设计模式迭代器模式 迭代器模式是一种行为模式,它用于提供遍历一组对象的标准方式. Iterator模式在Java Collection Framework中得到了广泛使用,其中Iterator ...

  7. java设计模式迭代器模式_迭代器模式和Java

    java设计模式迭代器模式 大家好,在本文中,我们将检查Iterator Pattern . 我知道你们中许多人已经使用过一种设计模式,但是也许您没有意识到它是模式,或者不知道它的巨大价值. 根据&l ...

  8. java中迭代器要导包吗_java 中迭代器的使用方法详解

    java 中迭代器的使用方法详解 前言: 迭代器模式将一个集合给封装起来,主要是为用户提供了一种遍历其内部元素的方式.迭代器模式有两个优点:①提供给用户一个遍历的方式,而没有暴露其内部实现细节:②把元 ...

  9. java设计模式迭代器模式_Java中的迭代器设计模式

    java设计模式迭代器模式 Iterator design pattern in one of the behavioral pattern. Iterator pattern is used to ...

  10. lterator 迭代器 静态属性Symbol.iterator Symbol(Symbol.iterator)

    ** lterator迭代器 ** 迭代模式:提供一种方法是可以顺序获得聚合对象中的各个元素,是一种最简单也最常见的设计模式.他可以让用户透过特定的接口巡防集合中的每一个元素而不用了解底层的实现 迭代 ...

最新文章

  1. 构建一个移动应用程序要花多少钱?
  2. MySQL Packet for query is too large
  3. 算法--删除链表的倒数第N个节点
  4. 高并发大流量专题---10、MySQL数据库层的优化
  5. CCF201803-2 碰撞的小球
  6. Lua字符串及模式匹配
  7. linux系统优化的方法
  8. JavaScript和HTML及CSS的通俗解释
  9. 怎么分行显示java程序,月光软件站 - 编程文档 - Java - 如何在J2ME的低级界面中轻松实现各种文字的自然分行显示...
  10. Mybatis 返回Map数据
  11. java url 请求 最大长度限制_Http请求 url 请求头 请求体 大小长度限制
  12. js加html连线实现流程,(jsPlumb开发入门教程实现html5拖拽连线.doc
  13. 新元宇宙每周连载《地球人奇游天球记》第十七回海王会龙
  14. 印象笔记 HTML邮件,如何通过私有邮箱保存邮件到印象笔记?
  15. Docker 取代 VM !是什么让 Docker 比 VM 或裸机更安全?
  16. 小程序预览报错60001,fail error:109
  17. Oracle`.`聚宝盆
  18. 计算机中关于数字的进制转换
  19. 将当前含有中文名称的文件 翻译成拼音
  20. matlab while 嵌套,MATLAB嵌套循环语句

热门文章

  1. java中什么是接口代码详解
  2. 【EdgeX】基于sdk-c随机数设备服务发布数据到MQTT消息总线上,并在MQTTX上订阅
  3. 铁头乔:开源社区那些事
  4. Java基础 DAY16
  5. 2022-2028全球与中国硅片清洗设备市场现状及未来发展趋势
  6. 客户端:Lync 2011 for Mac体验
  7. 解决新安装的 Arch Linux 在 GNOME 中搜狗输入法不显示候选词和输入延迟的问题
  8. vue3练习 el-table和echarts联动 完成数据的增删改查
  9. Mecha:将 Mesh 进行到底
  10. linux 查看磁盘、文件夹、文件大小(df du)