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+