锁定老帖子 主题:Iterator和for效率问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-10-19
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-10-19
这个不知道,帮你顶,你可以实际测下,数据库默认的是Iterator,类似游标样,不需要将数据取出,但是如果你用for的话, 需要知道数据集的长度,这个对于大数据量很耗时,不建议使用,以上个人意见,仅供参考~~~
|
|
返回顶楼 | |
发表时间:2011-10-19
增强的for循环就是用Iterator实现的
|
|
返回顶楼 | |
发表时间:2011-10-20
foreach循环就是用iterator实现的 所以没什么区别。而相比于普通的for循环 由于它只需要做一次边界检查 所以理论上性能会稍优。
BTW:其实相比于数据库的操作,java中的迭代的性能不用抠的太细。相比于性能,我觉得代码的可读性更重要些。 对于大数据量的存储用什么集合。这个貌似没有关系,还是要看你实际的业务需求。 比如 只是循环遍历的话,在List的范畴中 ArrayList(数组)的效率要高于LinkedList(双向链表)。 而需要在列表“中间”进行频繁地插入删除 后者的效率要高一些。 相关JCF的可以看下: http://blog.csdn.net/silentbalanceyh/article/details/4586611 |
|
返回顶楼 | |
发表时间:2011-10-20
foreach循环和 iterator 进行集合的遍历。
foreach循环也是iterator循环的一类,一样要实现iterator接口的类才能实现foreach循环,否则不能使用foreach。 但是foreach循环,属于副本循环,它循环的数据,不是原来你集合中的数据,而是拷贝的版本。所以在foreach循环中实现插入和删除,是无效的。 而iterator进行循环的时候,是可以插入和删除,但不建议这样做,因为弄不好出个快速失效异常。。。 至于哪个效率高点。。。。我想还是iterator吧。。。猜的。呵呵 |
|
返回顶楼 | |
发表时间:2011-10-20
葬雪晴 写道 foreach循环和 iterator 进行集合的遍历。
foreach循环也是iterator循环的一类,一样要实现iterator接口的类才能实现foreach循环,否则不能使用foreach。 但是foreach循环,属于副本循环,它循环的数据,不是原来你集合中的数据,而是拷贝的版本。所以在foreach循环中实现插入和删除,是无效的。 而iterator进行循环的时候,是可以插入和删除,但不建议这样做,因为弄不好出个快速失效异常。。。 至于哪个效率高点。。。。我想还是iterator吧。。。猜的。呵呵 受教了 |
|
返回顶楼 | |
发表时间:2011-10-20
<>++< 写道 foreach循环就是用iterator实现的 所以没什么区别。而相比于普通的for循环 由于它只需要做一次边界检查 所以理论上性能会稍优。
BTW:其实相比于数据库的操作,java中的迭代的性能不用抠的太细。相比于性能,我觉得代码的可读性更重要些。 对于大数据量的存储用什么集合。这个貌似没有关系,还是要看你实际的业务需求。 比如 只是循环遍历的话,在List的范畴中 ArrayList(数组)的效率要高于LinkedList(双向链表)。 而需要在列表“中间”进行频繁地插入删除 后者的效率要高一些。 相关JCF的可以看下: http://blog.csdn.net/silentbalanceyh/article/details/4586611 可以用foreach 这个功能jdk1.5+以上使用. |
|
返回顶楼 | |
发表时间:2011-10-20
迭代器如果不能用来做迭代,那它存在的意义是什么?
|
|
返回顶楼 | |
发表时间:2011-10-20
语法糖而已,还是会被编译成iterator
|
|
返回顶楼 | |
发表时间:2011-10-20
葬雪晴 写道 foreach循环和 iterator 进行集合的遍历。
foreach循环也是iterator循环的一类,一样要实现iterator接口的类才能实现foreach循环,否则不能使用foreach。 但是foreach循环,属于副本循环,它循环的数据,不是原来你集合中的数据,而是拷贝的版本。所以在foreach循环中实现插入和删除,是无效的。 而iterator进行循环的时候,是可以插入和删除,但不建议这样做,因为弄不好出个快速失效异常。。。 至于哪个效率高点。。。。我想还是iterator吧。。。猜的。呵呵 不对,foreach数据还是以前的数据,可以修改的。foreach编译后就是iterator,你可以反编译后看看。 |
|
返回顶楼 | |