天天看点

迭代器模式

 迭代器模式遍历集合的成熟模式,迭代器模式的关键是将遍历集合的任务交给一个叫做迭代器的对象,它的工作时遍历并选择序列中的对象,而客户端程序员不必知道或关心该集合序列底层的结构。

  迭代器模式的结构中包括四种角色。

  一、集合:一个接口,规定了具体集合需要实现的操作。

  二、具体集合:具体集合石实现了集合接口的一个实例,具体的集合按照一定的结构存储对象。具体集合应该有一个方法,该方法返回一个针对该集合的具体迭代器。

  三、迭代器:一个接口,规定了遍历具体集合的方法,比如next()方法。

  四、具体迭代器:实现了迭代器接口的类的实例。具体迭代器在实现迭代器接口所规定的遍历集合的方法时,比如next()方法,要保证首次调用将

按着集合的数据结构找到该集合的一个对象,并且每当找到集合中的一个对象,立即根据该集合的存储结构得到待遍历的后继对象的引用,并保证一次调用

next()方法可以遍历集合。

<a></a>

下列应用程序中,使用了迭代器模式中所涉及的类。该应用程序模拟点钞,使用hashset类的实例,即一个集合模拟保险箱hashset类的实例调用iterator()方法返回一个迭代器,用该迭代器模拟点钞机,而且在点钞过程中销毁假钞。

运行结果如下:

保险箱共有20张人民币!

第6张是假币,被销毁

第12张是假币,被销毁

第17张是假币,被销毁

保险箱现有真人民币17张,总价值是:

1700元

  迭代器优点之一:能够快速遍历集合。

  看下面的例子就能感觉出它的快速优势:

  迭代器的优点之二:能够实现不重新代码就可以应用于不能的容器类型。比如说原先用的事list编码的,但是后来想把相同的代码用于set,用迭代器将会显得特别方便。

  下面讲一讲listiterator

  listiterator是一个更加强大的iterator的子类型,但是它只能用于各种list类的访问。尽管iterator只能向前移

动,但是listiterator可以双向移动。他还可以产生相对于迭代器在列表中指向当前位置的前一个和后一个元素的索引,并且还可以用set()方法

替换掉它访问过的最后一个元素。你可以通过调用listiterator()方法产生一个指向list开始处的listiterator,并且还可以通过

调用listiterator(n)方法创建一个一开始就指向列表索引为n的元素处的listiterator。下面的示例演示了所有这些功能: