迭代器(也是一种设计模式)是一个对象,它的工作是遍历并选择序列中的对象,而客户端程序员不必知道或关心该序列底层的结构。此外迭代器通常被称为轻量级对象:创建它的代价小。因此,经常可以见到迭代器有些奇怪的限制,例如:Java的Iterator只能单向移动,这个Iterator只能用来:
1.使用方法Iterator()要求容器返回一个Iterator。Iterator将准备好返回序列的第一个元素。
2.使用next()获得序列中的下一个元素。
3.使用hasNext()检查序列中是否还有元素。
4.使用remove()将迭代器新近返回的元素删除。
public class Test {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
Iterator<String> iter = list.iterator();
while (iter.hasNext()) {
String name = iter.next();
System.out.print(name + " ");
}
if (!iter.hasNext()) {
System.out.println("指针到达了最后面");
}
// 将iterator指针调至最前面
iter = list.iterator();
if (iter.hasNext()) {
System.out.println(iter.next());
}
}
}
打印结果:
a b c 指针到达了最后面
a
可以把iterator理解为有状态的,它的内部会维护一个逻辑上的指针,每次调用next()方法,指针都会后移,上次遍历完之后,指针移到了末尾,所以需要重新赋值iterator对象,这样赋值后的逻辑指针会调整到第一个元素前面。
Iterator是一个接口,不能直接调用它的方法,所以必须调用iterator()方法,相当于将它声明为了一个实现Iterator接口的子类的引用。Collection接口是继承Iterator接口的,实现了List,Set接口的子类的对象都可以调用iterator()方法,而实现了Map的子类需要使用Iterator iter=map.keySet().iterator();方法进行遍历。