Java迭代器与迭代模式
来源:互联网 发布:安卓6.0 数据开关 编辑:程序博客网 时间:2024/05/21 11:08
在jdk中,与迭代器相关的接口有两个:Iterator 与 Iterable。
Iterator:迭代器,Iterator及其子类通常是迭代器本身的结构与方法;
Iterable:可迭代的,需要用到迭代器功能的其它类,如AbstractList HashMap等,需要实现该接口。
1, Iterator
提供标准的Java迭代器。Iterator接口实现后的功能是“使用”一个迭代器。
文档定义:
Package java.util; public interface Iterator<E> { boolean hasNext();//判断是否存在下一个对象元素 E next(); void remove(); }
2, Iterable
Iterable接口实现后的功能是“返回”一个迭代器,我们常用的实现了该接口的子接口有: Collection<E>, Deque<E>, List<E>, Queue<E>, Set<E> 等.该接口的iterator()方法返回一个标准的Iterator实现。实现这个接口允许对象成为 Foreach 语句的目标。就可以通过Foreach语法遍历你的底层序列。
文档定义:
Package java.lang; import java.util.Iterator; public interface Iterable<T> { Iterator<T> iterator(); }
3,迭代器的使用方法
(a) 若类A想要使用迭代器,则它的类声明部分为 class A implement Iterable
(b) 在类A实现中,要实现Iterable接口中的唯一方法:Iterator<T> iterator(); 这个方法用于返回一个迭代器,即Iterator接口及其子类;
(c) 在类A中,定义一个内部类S,专门用于实现Iterator接口,定制类A自已的迭代器实现。
class A implement Iterable { Iterator<T> iterator() {...} class S implement Iterator<E> { boolean hasNext() {....} E next() {....} void remove() {....} } }
1,定义
提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。
2,个人观点
我的理解,迭代模式就是把遍历算法从容器对象中独立出来。这是很有必要的,因为在面向对象设计中,一个难点就是辨认对象的职责。理想状态下,一个类应该只有一个单一的职责。职责分离可以最大限度的去耦合,但是职责单一说起来容易,做起来难。具体到本模式,明显可以看到,一个容器对象提供了两个职责:一是组织管理数据对象,二是提供遍历算法。
所以,Iterator模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样 既可以做到不暴露集合的内部结构,又可让外部代码透明的访问集合内部的数据。
3,类图(引用自http://289196801.iteye.com/blog/1511867)
- JAVA迭代器与迭代模式
- Java迭代器与迭代模式
- 迭代 迭代语句 迭代器 迭代模式
- Java迭代模式(Iterator模式)
- Java迭代模式(Iterator模式)
- 《Java设计模式》之迭代模式
- Java迭代模式(Iterator模式)
- java设计模式_迭代模式
- JAVA设计模式(十六)----迭代模式
- Java迭代与枚举
- Java迭代与枚举
- Java 迭代与递归
- java 集合与迭代
- 函数组合与集合管道模式 迭代 Java 中集合的函数模式
- 漫谈迭代模式与IEnumerable
- Java设计模式_Iterator(迭代容器)
- 设计模式--行为模式--迭代模式--Java
- Java设计模式之二十(迭代模式)
- 升级Ubuntu 12.04下的gcc到4.7
- 设计模式——装饰模式
- HashMap与HashTable的区别、HashMap与HashSet的关系
- traits:Traits技术初探
- servlet开发
- Java迭代器与迭代模式
- PHP从零单排(四)PHP中的文件上传处理
- sizeof()、strlen()、string中length()和size()
- POJ 2948 Martian Mining(DP)
- UVA 11437 - Triangle Fun
- eclipse下properties文件中文乱码的解决方案
- IP数据报首部检验和字段分析
- How to debug a buffer overrun
- java 数组学习