论坛首页 Java企业应用论坛

Iterator和for效率问题

浏览 13328 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-10-19  
在开发中我们经常选择Iterator和for循环对集合进行遍历,首先申明本人没有做过测试,但是在开发中那个遇到了这个情况 :对于数据库中的近40万条数据进行遍历操作,所以发出来进行讨论两者的效率问题,对于大数据量的存储一般采用哪种集合效率高
   发表时间:2011-10-19  
这个不知道,帮你顶,你可以实际测下,数据库默认的是Iterator,类似游标样,不需要将数据取出,但是如果你用for的话, 需要知道数据集的长度,这个对于大数据量很耗时,不建议使用,以上个人意见,仅供参考~~~
0 请登录后投票
   发表时间:2011-10-19  
增强的for循环就是用Iterator实现的
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  
foreach循环和 iterator 进行集合的遍历。

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

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

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

至于哪个效率高点。。。。我想还是iterator吧。。。猜的。呵呵
0 请登录后投票
   发表时间:2011-10-20  
葬雪晴 写道
foreach循环和 iterator 进行集合的遍历。

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

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

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

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

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


可以用foreach 这个功能jdk1.5+以上使用.
0 请登录后投票
   发表时间:2011-10-20  
迭代器如果不能用来做迭代,那它存在的意义是什么?
0 请登录后投票
   发表时间:2011-10-20  
语法糖而已,还是会被编译成iterator
0 请登录后投票
   发表时间:2011-10-20  
葬雪晴 写道
foreach循环和 iterator 进行集合的遍历。

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

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

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

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

不对,foreach数据还是以前的数据,可以修改的。foreach编译后就是iterator,你可以反编译后看看。
0 请登录后投票
论坛首页 Java企业应用版

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