意图

又名:游标(Cursor);

提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。

动机

一个聚合对象,提供访问元素的方法,而有不暴露它的内部结构。如list,将对列表的访问和遍历从列表对象中分离出来并放入一个迭代器(iterator)中。迭代器定义了一个访问该列表元素的接口。迭代器负责跟踪当前元素。

java实现要素:迭代器接口+迭代器+集合接口+集合实现

  1. 集合接口中定义,返回迭代器的接口方法
  2. 集合对象中具体实现返回的迭代器

代码实现

//迭代器接口
public interface Iterator <T>{
boolean hasNext();
T next();
T get(int index);
} //集合接口
public interface List <T>{
Iterator<T> iterator();
public T get(int i);
public int size();
} //集合实现,采用内部类实现迭代器。内部类可以操作外部类数据(私有数据)。
public class MyList implements List<String>{
private String[] data = {"A","B","C","D","E"};
public Iterator<String> iterator(){
return new itr();
} public String get(int i){
return data[i];
} public int size(){
return data.length;
} private class itr implements Iterator<String>{
private int pos=-1;
@Override
public boolean hasNext() {
if (pos<data.length-1) {
return true;
}
return false;
} @Override
public String next() {
if (pos<data.length-1) {
++pos;
}
return data[pos];
} @Override
public String get(int index) {
if (index<data.length) {
return data[pos];
}
return "";
}
}
} //测试
public class Test {
public static void main(String[] args) {
MyList myList=new MyList();
Iterator<String> iterator=myList.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}

JDK中的迭代器模式

整个JCF,遍地都是.....

 * @see     Set
* @see List
* @see Map
* @see SortedSet
* @see SortedMap
* @see HashSet
* @see TreeSet
* @see ArrayList
* @see LinkedList
* @see Vector
* @see Collections
* @see Arrays
* @see AbstractCollection
* @since 1.2
*/ public interface Collection<E> extends Iterable<E> {

最新文章

  1. Python-模块
  2. Django中的QuerySet查询优化之select_related
  3. win7登录后开机密码破解读取
  4. Spring MVC过滤器-委派过滤器代理(DelegatingFilterProxy)
  5. 转:Selenium之CSS Selector定位详解
  6. awk 以HWI开头,并且:相邻两行的第一个字段完全相同;
  7. Android NDK OpenCV C++
  8. Python第一天-----简单登录验证
  9. javascript——touch事件介绍与实例演示
  10. js中调用mangeto的js翻译
  11. 【常见踩坑】USB调试安装失败(Installation failed with message INSTALL_CANCELED_BY_USER)
  12. GitLab配置ssh key
  13. elasticsearch-mapping字段重要属性
  14. Linux常用命令之网络和关机重启命令
  15. c# partial 分部类和分部方法
  16. NoSuchMethodError: The getter &#39;inputs&#39; was called on null.
  17. 【Dubbo&amp;&amp;Zookeeper】6、 给dubbo接口添加白名单——dubbo Filter的使用
  18. genymotion 模拟器内安装软件 the app contains ARM native code and your devices cannot run ARM instructions
  19. ArrayList源码中的两个值得注意的问题
  20. GCC 符号表小结【转】

热门文章

  1. Java学习笔记-按值传递
  2. JDK Collection 源码分析(3)—— Queue
  3. PHP判断sql语句是否执行成功
  4. 顶级域名和二级域名cookie共享删除和修改
  5. Linux 基础命令
  6. C++ 操作XML文件 使用MSXML.DLL
  7. PHP 站点相对包含,路径的问题解决方法(include,require)
  8. runtime 第四部分method swizzling
  9. Deep Residual Learning
  10. word20161222