Java中迭代器使用的一点注意

学习Java编程时,用到了ListIterator迭代器,容器类是Vector。在进行一次迭代时,出现了错误,调试了挺长一段时间才发现自己在使用中的错误之处。
错误代码片断如下:
while(iter.hasPrevious())
{
if (some condition)
{
tmpObject = (SomeObject)iter.previous();
tmpObject.someOperation();
}
}
在这里iter是ListIterator的一个实例,SomeOjbect是Vector中存储的对象类型。
这个错误可能对于一个Java程序老手根本不会出现,但对于我这个菜鸟再加上有过使用STL迭代器的惯性,很容易就写下了上面的错误代码。错误在于:在Java中,迭代器的previous()或next()操作不仅返回下一个元素,它还负责推进迭代器的迭代动作进行下去。在上面的代码中,一旦条件不满足,就会跳过if块,这样就会跳过一次推进迭代进行的动作,导致一些不可预料的错误。
改正后的代码片断如下:
while(iter.hasPrevious())
{
tmpObject = (SomeObject)iter.previous();
if (some condition)
{
tmpObject.someOperation();
}
}
从表面上看,只是一句代码位置的不同,但得到的结果却是不一样的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值