开课吧Java课堂:如何使用迭代函数

97 阅读2分钟

在通过迭代函数访问类集之前,必须得到一个迭代函数。每一个Collection类都提供一个iterator( )函数,该函数返回一个对类集头的迭代函数。通过使用这个迭代函数对象,可以访问类集中的每一个元素,一次一个元素。通常,使用迭代函数循环通过类集的内容,步骤如下:

  1. 通过调用类集的iterator( )方法获得对类集头的迭代函数。
  2. 建立一个调用hasNext( )方法的循环,只要hasNext( )返回true,就进行循环迭代。
  3. 在循环内部,通过调用next( )方法来得到每一个元素。

对于执行List的类集,也可以通过调用ListIterator来获得迭代函数。正如上面解释的那样,列表迭代函数提供了前向或后向访问类集的能力,并可让你修改元素。否则,ListIterator如同Iterator功能一样。

这里是一个实现这些步骤的例子,说明了Iterator和ListIterator。

它使用ArrayList对象,但是总的原则适用于任何类型的类集。当然,ListIterator只适用于那些实现List接口的类集。

// Demonstrate iterators. 
import java.util.*; 
class IteratorDemo { 
 public static void main(String args[]) { 
 // create an array list 
 ArrayList al = new ArrayList(); 
 // add elements to the array list 
 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("Original contents of 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("Modified contents of 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("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+ 

特别值得注意的是:列表是如何被反向显示的。在列表被修改之后,litr指向列表的末端(记住,当到达列表末端时,litr.hasNext( )方法返回false)。为了以反向遍历列表,程序继续使用litr,但这一次,程序检测它是否有前一个元素。只要它有前一个元素,该元素就被获得并被显示出来。