通常希望依次访问类集中的元素。到目前为止,处理这个问题的最简单方法时使用迭代器,迭代器是一个实现 Iterator 或者实现 ListIterator 接口的对象。 Iterator 可以遍历类集中的元素,从而获得或删除元素。 ListIterator 继承 Iterator,允许双向遍历列表,并可以修改。
Iterator 接口的方法
方法 | 描述 |
---|---|
boolean hasNext() | 如果存在更多的元素,则返回 true, 否则返回 false |
Object next() | 返回下一个元素。如果没有下一个元素,则引发 NoSuchElementException 异常 |
void remove() | 从集合中删除当前元素,如果试图在调用 next()方法之前,调用 remove()方法,则引发 IllegalStateException异常。如果重复调用两次 remove() 方法也会发生这个异常 |
ListIterator接口的方法
方法 | 描述 |
---|---|
void add() | 将 obj 插入列表中的一个元素之前,该元素在下一次调用 next() 方法时,被返回。 |
boolean hasNext() | 如果存在下一元素,则返回 true ,否则返回 false. |
boolean hasPrevious() | 如果存在前一个元素,则返回true, 否则返回 false |
Object next() | 返回下一个元素,如果不存在下一个元素,则引发一个NoSuchElementException 异常 |
int nextIndex() | 返回下一个元素的下标,如果不存在下一个元素,则返回列表的大小 |
Object previous | 返回前一个元素,如果不存在前一个元素,则引发一个 NOSuchElementEXception 异常。 |
int previousIndex() | 返回前一个元素的下标,如果前一个元素不存在,则返回 -1 |
void remove() | 从列表中删除当前元素。如果 remove()方法在 next() 方法或是 previous()方法调用之前被调用,则引发一个 IllegalStateException 异常 |
void set(Object obj) | 将 object赋给当前元素。这是上一次调用next() 方法或 previous()方法最后返回的元素。 |
在通过迭代接口访问类集之前,必须得到一个迭代对象。每一个 Collection 类都提供一个 iterator()函数,该函数返回一个类集的迭代器。通过使用这个迭代器,可以访问类集中的每一个元素,一次一个元素。通常,使用迭代器循环变量类集的内容,步骤如下:
- 通过调用类集的 iterator() 方法获得类集的跌代器。
- 建立一个调用 hasNext()方法的循环,只要 hasNext()返回 true,就进行循环迭代。
- 在循环内部,通过调用 next() 方法来得到每一个元素。
对于实现 List 接口的类集,也可以通过调用 Listiterator 来获取迭代接口。列表的迭代接口提供了前向或后向访问类集的能力,并可修改元素。否则, ListIterator 同 Iterator 的功能一样。
import java.util.*;
public class ArrayListDemo {
public static void main(String[] args) {
ArrayList al = new ArrayList();
al.add("A");
al.add("B");
al.add("C");
al.add("D");
al.add("E");
al.add("F");
System.out.println("Original contents of List:");
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.println("Modified List forwards:");
itr = al.iterator();
while(itr.hasNext()){
Object element = itr.next();
System.out.print(element +" ");
}
System.out.println(" ");
System.out.println("Modified list backwards:");
while(litr.hasPrevious()){
Object element = litr.previous();
System.out.print(element + " ");
}
System.out.println(" ");
}
}
// Original contents of List:
// A B C D E F
// Modified List forwards:
// A++ B++ C++ D++ E++ F++
// Modified list backwards:
// F++ E++ D++ C++ B++ A++