意甲

java.util 第1部分:类集框架 (10)

2019-10-16 16:18:20来源:励志吧0次阅读

15.4 通过迭代函数访问类集

通常希望循环通过类集中的元素。例如,可能会希望显示每一个元素。到目前为止,处理这个问题的最简单方法是使用iterator,iterator是一个或者实现Iterator或者实现ListIterator接口的对象。Iterator可以完成循环通过类集,从而获得或删除元素。ListIterator

扩展Iterator,允许双向遍历列表,并可以修改单元。Iterator接口说明的方法总结在表15-4中。ListIterator接口说明的方法总结在表15-5中。

表15-4 由Iterator 定义的方法

方法 描述

boolean hasNext( ) 如果存在更多的元素,则返回true,否则返回false

Object next( ) 返回下一个元素。如果没有下一个元素,则引发NoSuchElementException异常

void remove( ) 删除当前元素,如果试图在调用next( )方法之后,调用remove( )方法,则引发

IllegalStateException异常

表15-5 由ListIterator 定义的方法

方法 描述

void add(Object obj) 将obj插入列表中的一个元素之前,该元素在下一次调用next( )方法时,被返回

boolean hasNext( ) 如果存在下一个元素,则返回true;否则返回false

boolean hasPrevious( ) 如果存在前一个元素,则返回true;否则返回false

Object next( ) 返回下一个元素,如果不存在下一个元素,则引发一个NoSuchElementException异常

int nextIndex( ) 返回下一个元素的下标,如果不存在下一个元素,则返回列表的大小

Object previous( ) 返回前一个元素,如果前一个元素不存在,则引发一个NoSuchElement Exception异常

int previousIndex( ) 返回前一个元素的下标,如果前一个元素不存在,则返回-1

void remove( ) 从列表中删除当前元素。如果remove( )方法在next( )方法或previous( )方法调用之前被调用,则引发一个IllegalStateException异常

void set(Object obj) 将obj赋给当前元素。这是上一次调用next( )方法或previous( )方法最后返回的元素

15.4.1 使用迭代函数

在通过迭代函数访问类集之前,必须得到一个迭代函数。每一个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,但这一次,程序检测它是否有前一个元素。只要它有前一个元素,该元素就被获得并被显示出来。

查看本文来源

商丘治疗卵巢炎医院
湖南白癜风医院有哪些
广州治疗月经不调方法
株洲治疗包皮过长方法
丽江哪家医院治癫痫病
分享到: