赛迪网 > IT技术 Java > Java读书频道-中
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

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

发布时间:2006.06.05 04:23     来源:清华大学出版社    作者:Herbert Schildt 著 张玉清 吴溥峰等 译

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,但这一次,程序检测它是否有前一个元素。只要它有前一个元素,该元素就被获得并被显示出来。

<<上一页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 下一页>>


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· Java2参考大全:第14章 java.lang 研究 (05-16) · Java2 参考大全:第13 章 字符串处理 (05-10)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 工信部“三定”公布 总编制731名设24司局
· 北京发电子商务监管意见 营利性网店须办照
· 直播 08中国城市信息化高峰论坛 案例点评
· 烽火网络校园解决方案 移民安置信息管理系统
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统