Java中的迭代器
通常,您将需要循环浏览集合中的元素。例如,您可能要显示每个元素。最简单的方法是使用迭代器,该迭代器是实现Iterator或ListIterator接口的对象。
迭代器使您可以循环浏览集合,获取或删除元素。ListIterator扩展了Iterator,以允许双向遍历列表以及修改元素。
您必须先获得一个,才能通过迭代器访问集合。每个集合类都提供一个iterator()方法,该方法将迭代器返回到集合的开头。通过使用此迭代器对象,您可以访问集合中的每个元素,一次访问一个元素。
通常,要使用迭代器循环浏览集合的内容,请按照以下步骤操作:
通过调用集合的iterator()方法,获得一个到集合开始处的迭代器。
设置一个调用hasNext()的循环。只要hasNext()返回true,就使循环迭代。
在循环中,通过调用next()获得每个元素。
对于实现List的集合,您还可以通过调用ListIterator获得一个迭代器。
迭代器声明的方法
如果有更多元素,则返回true。否则,返回false。
返回下一个元素。如果没有下一个元素,则抛出NoSuchElementException。
删除当前元素。如果尝试调用remove()而不是调用next()之前,则抛出IllegalStateException。
ListIterator声明的方法
插入到元素的列表中,该元素将由下次调用next()返回。
如果存在下一个元素,则返回true。否则,返回false。
如果存在上一个元素,则返回true。否则,返回false。
返回下一个元素。如果没有下一个元素,则抛出NoSuchElementException。
返回下一个元素的索引。如果没有下一个元素,则返回列表的大小。
返回上一个元素。如果没有上一个元素,则抛出NoSuchElementException。
返回上一个元素的索引。如果没有上一个元素,则返回-1。
从列表中删除当前元素。如果在调用next()或previous()之前调用remove(),则抛出IllegalStateException。
分配给当前元素。这是上一次调用next()或previous()返回的元素。
示例
这是同时演示Iterator和ListIterator的示例。它使用ArrayList对象,但是一般原则适用于任何类型的集合。
当然,ListIterator仅适用于实现List接口的那些集合。
import java.util.*; public class IteratorDemo { public static void main(String args[]) { //创建一个数组列表 ArrayList al = new ArrayList(); //将元素添加到数组列表 al.add("C"); al.add("A"); al.add("E"); al.add("B"); al.add("D"); al.add("F"); //使用迭代器显示al的内容 System.out.print("Original contents of al: "); Iterator itr = al.iterator(); while(itr.hasNext()) { Object element = itr.next(); System.out.print(element + " "); } System.out.println(); //修改要迭代的对象 ListIterator litr = al.listIterator(); while(litr.hasNext()) { Object element = litr.next(); litr.set(element + "+"); } System.out.print("Modified contents of al: "); itr = al.iterator(); while(itr.hasNext()) { Object element = itr.next(); System.out.print(element + " "); } System.out.println(); //现在,向后显示列表 System.out.print("Modified list backwards: "); while(litr.hasPrevious()) { Object element = litr.previous(); System.out.print(element + " "); } System.out.println(); } }
这将产生以下结果-
输出结果
Original contents of al: C A E B D F Modified contents of al: C+ A+ E+ B+ D+ F+ Modified list backwards: F+ D+ B+ E+ A+ C+