迭代器Iterator接口的作用及其使用
1. 迭代器Iterator的作用
什么是迭代器?
迭代器: 可以被next()函数调用并不断返回下一个值的对象称之为迭代器(Iterator)
从另一种角度来定义迭代器就是:提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。迭代器模式,就是为容器而生。
迭代器的作用是什么?
1.Iterator对象称为迭代器(设计模式的一种),主要用于遍历Collection 集合中的元素。
2.迭代是访问集合元素的一种方式,迭代器是一个能够记住遍历位置的对象,迭代器对象从集合的第一个元素开始访问,直到所有的元素都被访问完结束,如果想访问一个元素,需要把这个元素前面的所有元素都遍历后,才可以访问
3.Collection集合接口继承了java.lang.Iterable接口,该接口有一个iterator()方法,那么所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了Iterator接口的对象。
注意:
Iterator 仅用于遍历集合,Iterator本身并不提供承装对象的能力。如果需要创建Iterator 对象,则必须有一个被迭代的集合。
2. 迭代器Iterator的使用
迭代器的执行原理:(来源于网络图片)
使用迭代器遍历collection集合元素:(hasNext()和 next()方法)
代码演示:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;/*** 使用迭代器遍历collection集合元素* 内部的方法:hasNext()和 next()*/
public class IteratorTest {public void test(){Collection c= new ArrayList();c.add(123);c.add(456);c.add(new Cat("Tom",2));c.add(new String("Jery"));c.add(true);Iterator iterator = c.iterator();//方式一://在调用it.next()方法之前必须要调用it.hasNext()方法进行检测。若不调用,且下一条记录无效,直接调用it.next()会抛出NoSuchElementException异常。
// 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());
// //报异常:NoSuchElementException// System.out.println(iterator.next());while(iterator.hasNext()){System.out.println(iterator.next());}}
}
Iterator迭代器remove()方法的使用
代码演示:
public class IteratorTest {public void test(){Collection c= new ArrayList();c.add(123);c.add(456);c.add(new Cat("Tom",2));c.add(new String("Jery"));c.add(true);Iterator iterator = c.iterator();while(iterator.hasNext()){Object obj = iterator.next();if("Jery".equals(obj)){iterator.remove(); }}//遍历集合iterator = coll.iterator();while(iterator.hasNext()){System.out.println(iterator.next());}}}
Iterator迭代器一般的用法
以ArrayList为例:
public Iterator<T> iterator() {return new Iterator<T>() {private int index = -1;@Overridepublic boolean hasNext() {return ++index<size;}@Overridepublic T next() {return (T)elementData[index];}@Overridepublic T remove() {T t = next();ArrayList.this.remove(index);index--;return t;}};}
总结:
- 使用方法**iterator()**要求容器返回一个Iterator。Iterator将准备好返回序列的第一个元素;
- 使用**hasNext()**检查序列中是否有元素;
- 使用**next()**获取序列中下一个元素;
- 使用**remove()**将迭代器新返回的元素删除。
迭代器Iterator接口的作用及其使用相关推荐
- Java迭代器Iterator接口
迭代器 Iterator接口 迭代器的代码实现 增强for循环 Iterator接口 java.util.Iterator接口:(对集合进行遍历) 有两个常用方法 1.boolean hasNext( ...
- Java集合迭代器原理图解_Java Iterator接口遍历单列集合迭代器原理详解
这篇文章主要介绍了Java Iterator接口遍历单列集合迭代器原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Iterator接口概述 ...
- PHP:Iterator(迭代器)接口和生成器
迭代器 可在内部迭代自己的外部迭代器或类的接口.详情:http://php.net/manual/zh/class.iterator.php 接口摘要 Iterator extends Travers ...
- 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合...
不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...
- 2021-11-19迭代器的设计原则和iterator Traits的作用与设计
iterator Traits 的作用是提取出 iteration 的五个性质: 1)iterator_category 迭代器的种类,是否可以间隔跳跃,是单向前进还是两端都可以. 2)value_t ...
- 2021-06-19复习java Collection集合 Iterator接口_迭代器 增强for循环 泛型
2021-06-19复习java Collection集合 Iterator接口_迭代器 增强for循环 泛型 Collection集合 java.util.coLlection接口 所有单列集合的最 ...
- 迭代器的设计原则和Iterator Traits的作用与设计
一.迭代器设计原则 迭代器是容器与算法处理的桥梁 category分类,类别 difference_type两个迭代器之间的距离的类型,容器最大能放多少元素,超过differene_type会有问题. ...
- Java Iterator 接口简介和简单用法.
Iterator 的中文意思是迭代器. 单单从中文翻译也不易理解迭代器的意思啊, 其实Iterator是1个接口, 它的作用就是遍历容器的所有元素. 一, Iterator 接口简介 Iterat ...
- java for 迭代器_Java基础-迭代器Iterator与语法糖for-each
迭代器Iterator与语法糖for-each 一.为什么需要迭代器 设计模式迭代器 迭代器作用于集合,是用来遍历集合元素的对象.迭代器不是Java独有的,大部分高级语言都提供了迭代器来遍历集合.实际 ...
最新文章
- 喜欢绘画学的计算机,为什么有的人画画非常好却对计算机一窍不通
- Server Tomcat v7.0 Server at localhost was unable tonbs 报错问题解决
- 每日一皮:“快准恨”的程序员叠衣法,还不快学起来?
- 安全系列------web环境搭建组合
- 30是什么意思_“29+16”变“30+18”是什么意思?独立艺术院校有何优势?报考需要注意什么?...
- 持久化技术SharedPreferences存储
- python 类装饰器
- 谈谈JVM内部锁升级过程
- java.lang.IllegalArgumentException: Could not resolve placeholder ‘stu.age‘ in value “${stu.age}
- Python保存任意长度的matplotlib动画为GIF动图
- html中怎么让字体闪烁,HTML最简单的文字闪烁代码
- EasyClick Html UI 第十四节 CSS 盒子模型
- Oracle Dataguard基于rac主库搭建rac备库
- java毕业设计_基于android的二手书城app的设计与实现
- 30分钟学会shapely空间几何分析
- ISCC -MISC-Retrieve_the_passcode
- 武汉大学《GNSS、INS和激光雷达的紧密耦合预积分,用于城市环境中的车辆导航》
- 使用 Matlab 解决数学建模问题
- hdu 5594 ZYB's Prime 最大流
- 一分钟搞懂X86架构