迭代器(Iterator)模式,又叫做游标(Cursor)模式。
-----提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。
从定义可见,迭代器模式是为容器而生。很明显,对容器对象的访问必然涉及到遍历算法。你可以一股脑的将遍历方法塞到容器对象中去;或者根本不去提供什么遍历算法,让使用容器的人自己去实现去吧。
这两种情况好像都能够解决问题。然而在前一种情况,容器承受了过多的功能,它不仅要负责自己“容器”内的元素维护(添加、删除等等),而且还要提供遍历自身的接口;而且由于遍历状态保存的问题,不能对同一个容器对象同时进行多个遍历。第二种方式倒是省事,却又将容器的内部细节暴露无遗。
迭代器模式的出现,很好的解决了上面两种情况的弊端。Iterator是一个接口,集合容器以内部类的形式实现该接口,以实现功能。
Java中迭代器的用法:
************************************************************************
Iterator iterator = obj.iterator ();
while(iterator .hasNext())
{
System.out.println(iterator.getNext());
}
************************************************************************
以上代码为模板代码,用于遍历集合中的元素。
常用方法:
add() 增加元素
remove() 删除某元素
removeAll() 删除所有元素
*************************************************************************
ListIterator是Iterator的子接口,对其功能的扩展。
Iterator和ListIterator主要区别有:
1、ListIterator有add()方法,可以向List中添加对象,而Iterator不能。(增)
2、都可实现删除对象,Iterator仅能遍历,不能修改。ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator 没有此功能。因为ListIterator的这些功能,可以实现对LinkedList等List数据结构的操作。(删)
3、ListIterator可以实现对象的修改,set()方法可以实现。(改)
4、ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历。但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。(查)