意图
又名:游标(Cursor);
提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
动机
一个聚合对象,提供访问元素的方法,而有不暴露它的内部结构。如list,将对列表的访问和遍历从列表对象中分离出来并放入一个迭代器(iterator)中。迭代器定义了一个访问该列表元素的接口。迭代器负责跟踪当前元素。
java实现要素:迭代器接口+迭代器+集合接口+集合实现
- 集合接口中定义,返回迭代器的接口方法
- 集合对象中具体实现返回的迭代器
代码实现
//迭代器接口
public interface Iterator <T>{
boolean hasNext();
T next();
T get(int index);
}
//集合接口
public interface List <T>{
Iterator<T> iterator();
public T get(int i);
public int size();
}
//集合实现,采用内部类实现迭代器。内部类可以操作外部类数据(私有数据)。
public class MyList implements List<String>{
private String[] data = {"A","B","C","D","E"};
public Iterator<String> iterator(){
return new itr();
}
public String get(int i){
return data[i];
}
public int size(){
return data.length;
}
private class itr implements Iterator<String>{
private int pos=-1;
@Override
public boolean hasNext() {
if (pos<data.length-1) {
return true;
}
return false;
}
@Override
public String next() {
if (pos<data.length-1) {
++pos;
}
return data[pos];
}
@Override
public String get(int index) {
if (index<data.length) {
return data[pos];
}
return "";
}
}
}
//测试
public class Test {
public static void main(String[] args) {
MyList myList=new MyList();
Iterator<String> iterator=myList.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
JDK中的迭代器模式
整个JCF,遍地都是.....
* @see Set
* @see List
* @see Map
* @see SortedSet
* @see SortedMap
* @see HashSet
* @see TreeSet
* @see ArrayList
* @see LinkedList
* @see Vector
* @see Collections
* @see Arrays
* @see AbstractCollection
* @since 1.2
*/
public interface Collection<E> extends Iterable<E> {