通过迭代接口访问类集

通常希望依次访问类集中的元素。到目前为止,处理这个问题的最简单方法时使用迭代器,迭代器是一个实现 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()函数,该函数返回一个类集的迭代器。通过使用这个迭代器,可以访问类集中的每一个元素,一次一个元素。通常,使用迭代器循环变量类集的内容,步骤如下:

  1. 通过调用类集的 iterator() 方法获得类集的跌代器。
  2. 建立一个调用 hasNext()方法的循环,只要 hasNext()返回 true,就进行循环迭代。
  3. 在循环内部,通过调用 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++  

你可能感兴趣的:(java)