Iterator迭代器

1. Iterator介绍

在程序的开发中,经常需要遍历集合中所有的元素。针对这种需求,JDK专门提供了一个接口java.util.IteratorIterator接口也是java集合中的一员,但它与CollectionMap接口有所不同,Collection接口与Map接口主要用于存储元素,Collection接口中没有方法是带有索引作为参数的,不能进行常规的for循环遍历,而Iterator主要用来迭代访问 (即遍历) Collection中的元素,因此Iterator对象也被称为迭代器。

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

2. 迭代器的构造和使用

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

Iterator<E> iterator(); 返回此次Collection的元素上进行迭代的迭代器

2.2 迭代器的使用步骤

  1. 使用集合中的方法Iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态写法,左边接口,右边实现类)
  2. 使用Iterator接口中的方法hasNext判断还有没有下一个元素
  3. 使用Iterator接口中的方法next取出集合中的下一个元素
  • 代码演示:迭代器的使用
public static void main(String[] args) {//创建一个集合,左接口,右实现类,多态写法Collection<String> stars = new ArrayList<>();//往集合中增加元素,增加四大天王吧stars.add("刘德华");stars.add("张学友");stars.add("黎明");stars.add("郭富城");//1.使用集合中的方法Iterator()获取迭代器的实现类对象//注意:迭代器也是有泛型的,迭代器的泛型跟着集合走,集合用的什么,它用的什么Iterator<String> iterator = stars.iterator();//2.使用Iterator接口中的方法hasNext判断还有没有下一个元素boolean b = iterator.hasNext();System.out.println(b);  //true//3.使用Iterator接口中的方法next取出集合中的下一个元素,循环来判断,全部取出来while(iterator.hasNext()){String s = iterator.next();System.out.println(s);  //刘德华 张学友 黎明 郭富城}//此时全部的元素已经取出来,如果还是要再取的话,就会报异常 NoSuchElementException//String s = iterator.next();//不一定用while循环,还可以用for循环
//    for (stars.iterator();iterator.hasNext();){//        String s = iterator.next();
//        System.out.println(s);
//    }
}

迭代器的指针索引刚开始时是置为-1的,迭代器判断当前的指针的下一位即0号位置处有没有远元素,如果有,就把当前的指针索引向后移一位到0号位置处并把该位置的元素取出来,以此类推。

3. 增强for循环(foreach循环)

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

格式:

for(元素的数据类型 变量:Collection集合or数组){//....
}

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

代码跑一下:

  • 用法1:遍历数组
public static void main(String[] args) {//创建一个字符串数组String[] stars = new String[3];stars[0] = new String("周星驰");stars[1] = new String("刘德华");stars[2] = new String("周润发");//用foreach循环遍历数组for(String e : stars){System.out.println(e);  //周星驰 刘德华 周润发}
}
  • 用法2:遍历集合
public static void main(String[] args) {//创建一个集合,左接口,右实现类,多态写法Collection<String> stars = new ArrayList<>();//往集合中增加元素,增加四大天王吧stars.add("刘德华");stars.add("张学友");stars.add("黎明");stars.add("郭富城");//用foreach循环遍历数组for(String e : stars){System.out.println(e);  //刘德华 张学友 黎明 郭富城}
}

如果只是需要做遍历,强烈建议以后都用foreach循环

Iterator迭代器与foreach循环相关推荐

  1. Java学习之容器上(Collection接口常用方法,Iterator接口,使用foreach循环遍历Collection集合元素,Set集合通用知识(Hashset类,hashcode()与Lin

    1.容器API的类图结构如下: JAVA的集合类是一种特别有用的工具类,它可以用于存储数量不等的多个对象,并可以实现常用数据结构,如栈,队列等,除此之外,JAVA集合还可用于保存具有映射关系的关联数组 ...

  2. JavaSE Collections类 , Iterator迭代器 , 增强for循环

    Collections 它是集合的工具类,为集合体系扩展了一些其他的方法.类中都是静态的方法,可以使用类名直接调用. 可变参数 在JDK1.5之后,如果我们定义一个方法需要接受多个参数,并且多个参数类 ...

  3. 【小白学Java】D20》》》Iterator迭代器 增强for循环

    [友情链接]---–->Java中的各种集合大汇总,学习整理 [友情链接]----–> Collection集合 [友情链接]----–> ArrayList集合及其常用功能 [友情 ...

  4. c foreach循环_C ++中的foreach循环

    c foreach循环 介绍 (Introduction) The foreach loop in C++ or more specifically, range-based for loop was ...

  5. es6数组初始化_ES6 迭代器(Iterator)和 for...of循环使用方法

    一.什么是迭代器? 生成器 概念在Java,Python等语言中都是具备的,ES6也添加到了JavaScript中.Iterator可以使我们 不需要初始化集合,以及索引的变量 ,而是使用迭代器对象的 ...

  6. 2021-06-19复习java Collection集合 Iterator接口_迭代器 增强for循环 泛型

    2021-06-19复习java Collection集合 Iterator接口_迭代器 增强for循环 泛型 Collection集合 java.util.coLlection接口 所有单列集合的最 ...

  7. Java基础加强重温_05:Iterator迭代器、增强for循环、集合综合案例-斗地主、数据结构(栈、队列、数组、链表、红黑树)、List接口、Set接口

    摘要: Java基础加强重温_05: Iterator迭代器(指针跟踪元素). 增强for循环(格式.底层). 集合综合案例-斗地主(代码规范抽取代码,集合元素打乱). 数据结构[栈(先进后出,子弹夹 ...

  8. 不要在foreach循环里进行元素的remove/add操作。remove元素请使用iteratot方式,如果并发操作,需要对Iterator对象加锁

    不要在foreach循环里进行元素的remove/add操作.remove元素请使用iteratot方式,如果并发操作,需要对Iterator对象加锁

  9. 使用Iterator迭代器循环集合

    1.Iterator迭代器用于遍历集合元素,获取迭代器可以使用. 2.Iterator提供了统一遍历集合元素的 方式 ,其提供了用于遍历集合的连个方法----- boolean  hasNext()判 ...

最新文章

  1. R语言dataframe获取每个字段(特征)的数据类型实战:使用sapply函数获取每个字段(特征)的数据类型、通过柱状图可视化特征的种类以及个数
  2. Xamarin Essentials教程检查网络连通性Connectivity
  3. 链表游戏:CVE-2017-10661之完全利用
  4. QT的QPicture类的使用
  5. 汇编语言从入门到精通-4标识符和表达式
  6. 枚举生成MVC3: Bind Enum To DropDownList ?-java教程
  7. 爬山法实现 八皇后问题 (Python 实现)
  8. 复合文档(Compound Document)读写栗子
  9. CCF202006-1 线性分类器
  10. 使用缓冲流有什么好处_使用档案密集柜有什么好处?不看一看会后悔
  11. fastboot刷系统的步骤
  12. Word 批量转 PDF脚本
  13. LeetCode 247. 中心对称数
  14. SQL学习笔记(05)_JOIN的类型与用法
  15. PATC语言1-50
  16. 用C++实现数据总线的方法系列(上):基本概念同步队列
  17. 移动周刊第 188 期:Android 安全性要点与规范核心详析
  18. Vue组件编写之Alert提示框组件编写
  19. 三维立体坐标系 html5,几何画板绘制三维坐标系的操作方法
  20. endpoint下载

热门文章

  1. 前端开源框架jeecg和RuoYi,myui,vue-element-admin
  2. matlab中怎么求立方和,急求立方和计算公式!
  3. 前端修改服务器cookie,前端中怎样设置cookie
  4. lettuce执行原理
  5. 副本技能-exe4j将可运行Jar包转换为exe程序
  6. python对《三国演义》中出现的人物出现的次数进行统计
  7. 文件操作(详细总结)
  8. 软件测试工程师 面试100题 基础篇
  9. Sql查询区分大小写
  10. 字节的管理模式,比阿里更先进吗?