Iterator迭代器与foreach循环
Iterator迭代器
1. Iterator介绍
在程序的开发中,经常需要遍历集合中所有的元素。针对这种需求,JDK
专门提供了一个接口java.util.Iterator
。Iterator
接口也是java
集合中的一员,但它与Collection
、Map
接口有所不同,Collection
接口与Map
接口主要用于存储元素,Collection接口中没有方法是带有索引作为参数的,不能进行常规的for循环遍历,而Iterator
主要用来迭代访问 (即遍历) Collection
中的元素,因此Iterator对象也被称为迭代器。
迭代:即Collection集合元素的通用获取方式。在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续再判断,如果还有就再取出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。
2. 迭代器的构造和使用
2.1 Iterator迭代器是一个接口,我们无法直接使用,需要使用Iterator接口的实现类对象,获取实现类的方式比较特殊,Collection接口中有一个方法,叫iterator(),这个方法返回的就是迭代器的实现类对象。
Iterator<E> iterator(); 返回此次Collection的元素上进行迭代的迭代器
2.2 迭代器的使用步骤
- 使用集合中的方法Iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态写法,左边接口,右边实现类)
- 使用Iterator接口中的方法hasNext判断还有没有下一个元素
- 使用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循环相关推荐
- Java学习之容器上(Collection接口常用方法,Iterator接口,使用foreach循环遍历Collection集合元素,Set集合通用知识(Hashset类,hashcode()与Lin
1.容器API的类图结构如下: JAVA的集合类是一种特别有用的工具类,它可以用于存储数量不等的多个对象,并可以实现常用数据结构,如栈,队列等,除此之外,JAVA集合还可用于保存具有映射关系的关联数组 ...
- JavaSE Collections类 , Iterator迭代器 , 增强for循环
Collections 它是集合的工具类,为集合体系扩展了一些其他的方法.类中都是静态的方法,可以使用类名直接调用. 可变参数 在JDK1.5之后,如果我们定义一个方法需要接受多个参数,并且多个参数类 ...
- 【小白学Java】D20》》》Iterator迭代器 增强for循环
[友情链接]---–->Java中的各种集合大汇总,学习整理 [友情链接]----–> Collection集合 [友情链接]----–> ArrayList集合及其常用功能 [友情 ...
- c foreach循环_C ++中的foreach循环
c foreach循环 介绍 (Introduction) The foreach loop in C++ or more specifically, range-based for loop was ...
- es6数组初始化_ES6 迭代器(Iterator)和 for...of循环使用方法
一.什么是迭代器? 生成器 概念在Java,Python等语言中都是具备的,ES6也添加到了JavaScript中.Iterator可以使我们 不需要初始化集合,以及索引的变量 ,而是使用迭代器对象的 ...
- 2021-06-19复习java Collection集合 Iterator接口_迭代器 增强for循环 泛型
2021-06-19复习java Collection集合 Iterator接口_迭代器 增强for循环 泛型 Collection集合 java.util.coLlection接口 所有单列集合的最 ...
- Java基础加强重温_05:Iterator迭代器、增强for循环、集合综合案例-斗地主、数据结构(栈、队列、数组、链表、红黑树)、List接口、Set接口
摘要: Java基础加强重温_05: Iterator迭代器(指针跟踪元素). 增强for循环(格式.底层). 集合综合案例-斗地主(代码规范抽取代码,集合元素打乱). 数据结构[栈(先进后出,子弹夹 ...
- 不要在foreach循环里进行元素的remove/add操作。remove元素请使用iteratot方式,如果并发操作,需要对Iterator对象加锁
不要在foreach循环里进行元素的remove/add操作.remove元素请使用iteratot方式,如果并发操作,需要对Iterator对象加锁
- 使用Iterator迭代器循环集合
1.Iterator迭代器用于遍历集合元素,获取迭代器可以使用. 2.Iterator提供了统一遍历集合元素的 方式 ,其提供了用于遍历集合的连个方法----- boolean hasNext()判 ...
最新文章
- R语言dataframe获取每个字段(特征)的数据类型实战:使用sapply函数获取每个字段(特征)的数据类型、通过柱状图可视化特征的种类以及个数
- Xamarin Essentials教程检查网络连通性Connectivity
- 链表游戏:CVE-2017-10661之完全利用
- QT的QPicture类的使用
- 汇编语言从入门到精通-4标识符和表达式
- 枚举生成MVC3: Bind Enum To DropDownList ?-java教程
- 爬山法实现 八皇后问题 (Python 实现)
- 复合文档(Compound Document)读写栗子
- CCF202006-1 线性分类器
- 使用缓冲流有什么好处_使用档案密集柜有什么好处?不看一看会后悔
- fastboot刷系统的步骤
- Word 批量转 PDF脚本
- LeetCode 247. 中心对称数
- SQL学习笔记(05)_JOIN的类型与用法
- PATC语言1-50
- 用C++实现数据总线的方法系列(上):基本概念同步队列
- 移动周刊第 188 期:Android 安全性要点与规范核心详析
- Vue组件编写之Alert提示框组件编写
- 三维立体坐标系 html5,几何画板绘制三维坐标系的操作方法
- endpoint下载