迭代器模式定义如下:
提供一种方法访问一个容器对象中的各个对象,而又勿需暴露该对象的内部细节,是一种只应用于容器对象遍历的设计模式。
使用迭代器模式的情景如下:
遍历集合对象,不需要知道对象在集合中的存储方式;用户可以同时使用多个迭代器遍历一个集合。
在计算机程序设计中,经常会遇到各种各样的容器,如数组、链表、集合、映射等。在容器的各种操作中,元素遍历是最常见的操作之一,不同类型的容器,遍历方法也不同。
迭代器模式,提供一种方法顺序访问一个集合对象中的各个元素,而又不暴露其内部的表示。其实JDK中的迭代器模式是很成熟的,它应用在许多的容器中。下面的代码体现了迭代器在Vector、LinkedList、Set容器中的遍历应用。
public class Test {
public static void traverse(Collection<String> c) {
Iterator<String> it = c.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
public static void main(String[] args) {
Vector<String> v = new Vector<>();
v.add("aaa");
v.add("bbb");
v.add("ccc");
System.out.println("Vector traverse:");
traverse(v);
System.out.println();
LinkedList<String> l = new LinkedList<>();
l.add("aaa");
l.add("bbb");
l.add("ccc");
System.out.println("LinkedList traverse:");
traverse(l);
System.out.println();
Set<String> s = new HashSet<>();
s.add("aaa");
s.add("bbb");
s.add("ccc");
System.out.println("Set traverse:");
traverse(s);
System.out.println();
}
}
我们知道:Vector容器的特点是内存空间是线性、连续的;LinkedList容器的特点是链式结构;Set集合的特点是树形结构。虽然这三类容器的特点不同,但却是调用相同的遍历方法traverse()完成了容器中元素的遍历。因此我们可以所,采用迭代器设计模式后,容器的元素遍历与具体的容器是无关的。
想要深入了解迭代器模式的,可以去查看Iterator的原码,这里就不做深入的了解了。