论坛首页 Java企业应用论坛

Iterator和for效率问题

浏览 13324 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-10-20  
java_user 写道
葬雪晴 写道
foreach循环和 iterator 进行集合的遍历。

foreach循环也是iterator循环的一类,一样要实现iterator接口的类才能实现foreach循环,否则不能使用foreach。

但是foreach循环,属于副本循环,它循环的数据,不是原来你集合中的数据,而是拷贝的版本。所以在foreach循环中实现插入和删除,是无效的。

而iterator进行循环的时候,是可以插入和删除,但不建议这样做,因为弄不好出个快速失效异常。。。

至于哪个效率高点。。。。我想还是iterator吧。。。猜的。呵呵

不对,foreach数据还是以前的数据,可以修改的。foreach编译后就是iterator,你可以反编译后看看。

foreach时删除集合中的元素是会抛异常的
0 请登录后投票
   发表时间:2011-10-20  
<>++< 写道
foreach循环就是用iterator实现的 所以没什么区别。而相比于普通的for循环 由于它只需要做一次边界检查 所以理论上性能会稍优。
BTW:其实相比于数据库的操作,java中的迭代的性能不用抠的太细。相比于性能,我觉得代码的可读性更重要些。
对于大数据量的存储用什么集合。这个貌似没有关系,还是要看你实际的业务需求。
比如 只是循环遍历的话,在List的范畴中 ArrayList(数组)的效率要高于LinkedList(双向链表)。
而需要在列表“中间”进行频繁地插入删除 后者的效率要高一些。
相关JCF的可以看下: http://blog.csdn.net/silentbalanceyh/article/details/4586611


我的理解和这个一样。可以学习学习。
0 请登录后投票
   发表时间:2011-10-20   最后修改:2011-10-20
java_user 写道
葬雪晴 写道
foreach循环和 iterator 进行集合的遍历。

foreach循环也是iterator循环的一类,一样要实现iterator接口的类才能实现foreach循环,否则不能使用foreach。

但是foreach循环,属于副本循环,它循环的数据,不是原来你集合中的数据,而是拷贝的版本。所以在foreach循环中实现插入和删除,是无效的。

而iterator进行循环的时候,是可以插入和删除,但不建议这样做,因为弄不好出个快速失效异常。。。

至于哪个效率高点。。。。我想还是iterator吧。。。猜的。呵呵

不对,foreach数据还是以前的数据,可以修改的。foreach编译后就是iterator,你可以反编译后看看。


foreach编译后就是iterator 这点大家都认同,但想要更改集合中的数据,就必须用相应Iterator的 add()和remove()来做
在foreach循环中是更改不了集合的数据的。
但我不认同他说的foreach 循环的是拷贝的副本这句话,求指教
0 请登录后投票
   发表时间:2011-10-20  
yanyilin224 写道
java_user 写道
葬雪晴 写道
foreach循环和 iterator 进行集合的遍历。

foreach循环也是iterator循环的一类,一样要实现iterator接口的类才能实现foreach循环,否则不能使用foreach。

但是foreach循环,属于副本循环,它循环的数据,不是原来你集合中的数据,而是拷贝的版本。所以在foreach循环中实现插入和删除,是无效的。

而iterator进行循环的时候,是可以插入和删除,但不建议这样做,因为弄不好出个快速失效异常。。。

至于哪个效率高点。。。。我想还是iterator吧。。。猜的。呵呵

不对,foreach数据还是以前的数据,可以修改的。foreach编译后就是iterator,你可以反编译后看看。

foreach时删除集合中的元素是会抛异常的

抛异常 和 数据没关系,是checkForComodification()这个方法 检查到该集合被修改过(this$0.modCount != expectedModCount) 而抛出的异常。
0 请登录后投票
   发表时间:2011-10-20  
拷贝版本坑爹了
0 请登录后投票
   发表时间:2011-10-20  
用简单的例子测试过,数据量小的话是for快,数据库量大的话就是iterator了...
0 请登录后投票
   发表时间:2011-10-20  
ArrayList for循环效率要比iterator高
0 请登录后投票
   发表时间:2011-10-20  
我觉得foreach是为了让多线程进行的更快些,而忽略线程互斥的因素,不是为了单任务提速的目的吧
0 请登录后投票
   发表时间:2011-10-21  
你对40w数据遍历再快能快到那里去?
0 请登录后投票
   发表时间:2011-10-21  
chenchuan 写道
在开发中我们经常选择Iterator和for循环对集合进行遍历,首先申明本人没有做过测试,但是在开发中那个遇到了这个情况 :对于数据库中的近40万条数据进行遍历操作,所以发出来进行讨论两者的效率问题,对于大数据量的存储一般采用哪种集合效率高

foreach 循环和Iterator 是一个原理。
40W数据遍历?
可以采用分页机制,每次遍历一部分,然后指针向前移动。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics