`
tianhandigeng
  • 浏览: 369073 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Iterator使用的大陷阱

 
阅读更多

     今天在使用Iterator的时候被一个问题困扰了很久,最后通过一步步的找错终于找出了错误,原因是忽视了一个小问题,现在先来说一下我的操作:

	while(it.hasNext()){
					Map<String,Object> product=it.next()
;
					if(product.containsKey("pid")){
						int value=Integer.parseInt(String.valueOf(product.get("pid")));
						if(value==pid){
							shoppingList.remove(it.next()
);
						}
					}
				}

这是我的代码,相信大家都可以看懂了,但是奇怪的是运行这段代码以后,总是报NoSuchElementException 异常,为什么呢?找了很久都没找出来,最后发现了问题的所在, 看到上面的红色标记没有,这里有两个it.next();我们来看一下这个方法在API中的说明:

 

next
E next()
Returns the next element in the iteration. 

Returns:
the next element in the iteration. 
Throws: 
NoSuchElementException - iteration has no more elements.

 现在应该知道问题的所在了吧,第一个it.next()后再去it.next()就不是原来想要的了,也就是说it.next()后这个it就指向了下一个对象,所以第二个it.next() 应该换成product,对于Iterator处理,建议新建一个变量保存it.next()的值,后面就直接对这个值操作就行了。

 

 

<!-- Generated by javadoc (build 1.6.0) on Wed Nov 29 02:21:55 PST 2006 -->

<noscript></noscript>
分享到:
评论
15 楼 qjtttt 2011-03-20  
楼主在逗大家。。。。
14 楼 wendal 2011-02-22  
Javaeye能否过滤一下,这种LJ帖就不要上主页啦!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
13 楼 rockethj8 2011-02-22  
囧~!orz
12 楼 bitray 2011-02-22  
楼主确实很搞笑
11 楼 xgj1988 2011-02-22  
OH 卖糕的
10 楼 freish 2011-02-22  
hello world级别的错误
9 楼 webee 2011-02-22  
LZ,这个问题就像我今天才知道原来首都机场在北京一样!
8 楼 webee 2011-02-22  
大陷进啊,晕!
7 楼 wdz567 2011-02-22  
楼主自己要注意。。。。。
6 楼 prettyinsight 2011-02-22  
我还以为楼主要说的是同时对一容器进行迭代和删除操作
5 楼 deeplyloving 2011-02-22  
 楼主太逗了
4 楼 li445970924 2011-02-22  
你在一个{}里调了两次 it.next()
3 楼 泛舟天下 2011-02-22  
自己的错误,不要归咎于Iterator
2 楼 seanla 2011-02-22  
确实是低级错误
1 楼 avgguy 2011-02-22  
Orz.......

这种低级错误也敢贴出来........

相关推荐

Global site tag (gtag.js) - Google Analytics