目录
0、定义
1、迭代器模式的四种角色
2、迭代器模式的UML类图
3、示例代码
4、迭代器的next()方法与集合的get(int index)方法的效率对比(LinkedList为例)
0、定义
提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。
1、迭代器模式的四种角色
- 集合(Aggregate):一个接口,规定了具体集合需实现的操作。
- 具体集合(ConcreteAggregate):具体集合是实现集合接口的类的实例,具体集合按着一定结构存储对象。具体集合应当有一个方法,该方法返回一个针对该集合的具体迭代器。
- 迭代器(Iterator):一个接口,规定了遍历具体集合的方法,比如next()方法。
- 具体迭代器(ConcreteIterator):实现迭代器接口的类的实例。具体迭代器在现实迭代器接口所规定的遍历集合的方法时,比如next()方法,要保证next()方法的首次调用将按着集合的数据结构找到该集合中的一个对象,而且每当找到集合中的一个对象,立刻根据该集合的存储结构得到待遍历的后继对象的引用,并保证依次调用next()方法可以遍历集合。
2、迭代器模式的UML类图
3、示例代码
待设计……
4、迭代器的next()方法与集合的get(int index)方法的效率对比(LinkedList为例)
package xyz.jangle.list;
import java.util.Iterator;
import java.util.LinkedList;
public class ListMain {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<String>();
for (int i = 0; i < 39999; i++) {
list.add(""+i);
}
Iterator<String> iterator = list.iterator();
long time1 = System.currentTimeMillis();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
long time2 = System.currentTimeMillis();
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
long time3 = System.currentTimeMillis();
System.out.println("Iterator:"+(time2-time1));
System.out.println("For:"+(time3-time2));
}
}
输出结果
Iterator:153
For:1855
总结:使用迭代器效率要比get方法快很多,数量越大,效果越明显。