通常,需要遍历集合中的元素。例如,希望显示每个元素。最简单的方法是使用迭代器,它是一个实现Iterator或ListIterator接口的对象。
Iterator可以循环访问集合,获取或删除元素。ListIterator扩展Iterator接口来实现列表的双向遍历和元素的修改。
在通过迭代器访问集合之前,必须先获取一个集合。每个集合类都提供了一个iterator()方法,该方法将迭代器返回到集合的开头。通过使用此迭代器对象,可以访问集合中的每个元素,一次访问一个元素。
通常,要使用迭代器循环遍历集合的内容,请按照下列步骤操作 -
通过调用集合的iterator()方法获取集合开头的迭代器。
设置一个调用hasNext()的循环。只要hasNext()返回true,就循环迭代。
在循环中,通过调用next()获取每个元素。
对于实现List的集合,还可以通过调用ListIterator来获取迭代器。
Iterator声明的方法如下 -
编号
方法
描述
1
boolean hasNext()
如果有更多元素,则返回true。否则返回false。
2
Object next()
返回下一个元素。如果没有下一个元素,则抛出NoSuchElementException异常。
3
void remove()
删除当前元素。如果尝试调用remove()之前没有调用next(),则抛出IllegalStateException异常。
ListIterator声明的方法
编号
方法
描述
1
void add(Object obj)
将obj插入元素前面的列表中,该元素将在下一次调用next()时返回。
2
boolean hasNext()
如果有下一个元素,则返回true。否则返回false。
3
boolean hasPrevious()
如果有前一个元素,则返回true。否则返回false。
4
Object next()
返回下一个元素。如果没有下一个元素,则抛出NoSuchElementException异常。
5
int nextIndex()
返回下一个元素的索引。如果没有下一个元素,则返回列表的大小。
6
Object previous()
返回前一个元素。如果没有前一个元素,则抛出NoSuchElementException异常。
7
int previousIndex()
返回前一个元素的索引。如果没有前一个元素,则返回-1。
8
void remove()
从列表中删除当前元素。如果在调用next()或previous()之前调用remove(),则抛出IllegalStateException异常。
9
void set(Object obj)
将obj分配给当前元素,这是调用next()或previous()最后返回的元素。
示例
这是一个演示Iterator和ListIterator的示例。它使用ArrayList对象,但一般原则适用于其它类型的集合。
当然,ListIterator仅适用于那些实现List接口的集合。
import java.util.*;
public class IteratorDemo {
public static void main(String args[]) {
// Create an array list
ArrayList al = new ArrayList();
// 向 ArrayList 添加元素
al.add("C");
al.add("A");
al.add("E");
al.add("B");
al.add("D");
al.add("F");
// Use iterator to display contents of al
System.out.print("al 的原始内容: ");
Iterator itr = al.iterator();
while(itr.hasNext()) {
Object element = itr.next();
System.out.print(element + " ");
}
System.out.println();
// Modify objects being iterated
ListIterator litr = al.listIterator();
while(litr.hasNext()) {
Object element = litr.next();
litr.set(element + "+");
}
System.out.print("al 的修改后内容: ");
itr = al.iterator();
while(itr.hasNext()) {
Object element = itr.next();
System.out.print(element + " ");
}
System.out.println();
// Now, display the list backwards
System.out.print("修改后列表向后遍历: ");
while(litr.hasPrevious()) {
Object element = litr.previous();
System.out.print(element + " ");
}
System.out.println();
}
}
执行上面示例代码,得到以下代码 -
al 的原始内容: C A E B D F
al 的修改后内容: C+ A+ E+ B+ D+ F+
修改后列表向后遍历: F+ D+ B+ E+ A+ C+
¥ 我要打赏
纠错/补充
收藏
加QQ群啦,易百教程官方技术学习群
注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。