前言
为什么会有迭代器?
当我们想要 遍历取出集合一组数据时,一般都是用for里面套着i循环,或者使用for(对象 x :某个集合)的形式取出,不过因为集合类型的不同,取出的形式也不同,但是当我们想要一种统一的方法去遍历集合时,就可以用迭代器去实现,说了那么多,不如来一个直观的例子。
这里模仿Arraylist集合中的迭代器实现过程,其中
Iterator:执行递增遍历的接口
Collection:一些集合的上层接口
Arraylist: 目前只实现了add、size及迭代器
ArrayListIterator: 用于Arraylist的迭代器
Iterator接口
|
|
Collection接口
|
|
Arraylist类(这里ArrayListIterator是其内部类)
|
|
测试类:
|
|
至此,可以归纳一下迭代器设计模式的一般形式
其中:
1:Iterator(迭代器) 参与者:
定义访问和遍历元素的接口(如Iterator)
2.ConcreteIterator(具体迭代器)参与者
实现迭代器的接口(如ArrayListIterator)
3.Aggregate(聚合)参与者
定义建立Iterator参与者的接口(如Collection)
4.ConcreteAggregate(具体聚合)参与者
实现Aggregate所定义的接口(如Arraylist)
最后不得不提的是,无论一个集合实现的结果如何,都能使用iterator,此外,我们通过改变iterato,来增加各种iterator,如反向遍历,双向遍历(即,增加一个previous方法),只要注意一下currentInde和index就可以了