一、概念
迭代器模式(Iterator Pattern):迭代器模式将集合对象的遍历操作从集合类中拆分出来,放到迭代器类中,让两者的职责更加单一。
通俗的讲:迭代器模式就是提供一种遍历的方法,这种方法有两个特点:一是按你想要的方式访问到你想访问的元素,二是不暴露底层是什么存的。
大部分编程语言都提供了遍历容器的迭代器类,我们在平时开发中,直接拿来用即可,几乎不大可能从零编写一个迭代器。
二、实现
这里实现一个简单字符串迭代器:
1、迭代器接口
public interface Iterator<E> {boolean hasNext();void next();E getCurrentItem();
}
2、实现迭代器
public class ArrayIterator<E> implements Iterator<E> {private int index;private ArrayList<E> arrayList;public ArrayIterator(ArrayList<E> list) {this.arrayList = list;}@Overridepublic boolean hasNext() {return index != arrayList.size();}@Overridepublic void next() {index++;}@Overridepublic E getCurrentItem() {return arrayList.get(index);}
}
3、测试类
public class Client {public static void main(String[] args) {ArrayList<String> nameList = new ArrayList<>();nameList.add("Jay");nameList.add("Jason");nameList.add("Daniel");ArrayIterator iterator = new ArrayIterator(nameList);while (iterator.hasNext()) {String name = (String) iterator.getCurrentItem();System.out.println(name);iterator.next();}}
}
4、运行结果
总结:对于类似数组和链表这样的数据结构,遍历方式比较简单,在原来的类中实现也可以。但是,对于复杂的数据结构(比如树、图)来说,有各种复杂的遍历方式。比如,树有前中后序、按层遍历,图有深度优先、广度优先遍历等等。如果将这部分遍历的逻辑写到容器类中,也会导致容器类代码的复杂性,所以统一将遍历操作拆分到迭代器类中。