迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。迭代器修改了常规指针的接口,所谓迭代器是一种概念上的抽象:那些行为上像迭代器的东西都可以叫做迭代器。然而迭代器有很多不同的能力,它可以把抽象容器和通用算法有机的统一起来。迭代器基本分为五种,输入输出迭代器,前向逆向迭代器,双向迭代器和随机迭代器。
迭代器设计模式(Iterator Design Pattern),也叫作游标设计模式(Cursor Design Pattern)。
迭代器模式将集合对象的遍历操作从集合类中拆分出来,放到迭代器类中,让两者的职责更加单一。其定义是,提供一种方法来访问聚合对象,而不暴露这个对象的内部实现。
迭代器模式的主要优点如下:封装性良好,访问一个聚合对象的内容而无需暴露它的内部实现;将遍历操作交给迭代器,简化了复杂聚合类的设计;支持以不同的方式遍历聚合对象,在同一个聚合对象上可以定义多种遍历方式;增加新的聚合类和迭代器类都很方便,满足开闭原则。
迭代器模式的主要缺点如下:迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加;抽象迭代器的设计难度较大,需要充分考虑系统将来的扩展。
迭代器模式的适用场景如下:访问一个聚合对象的内容而无需暴露它的内部实现;需要为一个聚合对象提供多种遍历方式;为遍历不同的聚合对象提供一个统一的接口。
最顶层的 Collection 集合接口继承了 Iterable接口,其实表明了所有的集合对象都是可迭代对象,并且都需要实现获取 Iterator 对象的方法。
将这个源码映射到典型实现中,Iterable 接口和 Collection 接口就是抽象聚合接口,Iterator 接口则是抽象迭代器接口。