且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

100万条数据遍历,lambda会比for循环快吗?

更新时间:2022-10-11 14:31:37

普通for循环最快,不接受反驳

看使用场景,如果是纯计算型,直接用for循环,如果有其他的io操作,考虑并行的stream,主要取决于运算和线程同步的开销

lambda事实上还是在一个线程内运行,那么具体怎么实现的呢?

把线程看作一个任务池,每次创建一个任务,其实就是往任务池中插入一个任务。程序继续往下走,直到当前所有代码执行完毕之后,再从线程获取下一个任务执行。

lambda就是玩了这个小把戏,让人感觉是异步,事实上是任务碎片化的操作。

循环和lambda性能上差别就要看任务调度速度了,但我觉得,大多数情况下,还是for循环效率更高。

lambda的好处主要是不容易阻塞而已。

根据 Alex Zhitnitsky 的测试结果显示:坚持使用传统的 Java 编程风格——iterator 和 for-each 循环——比 Java 8 的实现性能更佳。

使用迭代器或 for-each 循环是遍历 ArrayList 最有效的方式,性能比采用索引值的传统 for 循环方式好两倍。

在 Java 8 的方法中,并行流的性能***。但是请小心,在某些情况下它也可能会导致程序运行得更慢。Lambda 表达式的速度介于流与并行流之间。

不会,stream开启并行后,大数据量才会提高一丢丢

应该不会,越是简单的语法,越是执行效率慢。这也解释了为什么python执行效率不如java

lambda中有并行流,可以多线程处理。不过单纯的100万条数据纯遍历,for还是会快一些的,数据量小的时候,多线程不一定比单线程快,不过当数据量很大,大几千万甚至上亿的时候,并行流或许会快一些

lambda和stream是两回事,问题应该是stream和for循环对比。正常串行stream与for对比,stream会慢到1.4-1.5倍;并行流循环会比较快只适合大量数据计算否则线程开销及同步操作会有性能损耗,运行速度大概是0.6-0.8倍for循环

很多情况下lambda会快,大部分编译器会把lambda变成inline函数。如果for循环不在inline函数里,代码不会被cache,如果for循环在override的函数中,会更慢。所以,lambda是替代多态(虚指针)的好办法。

这个得看情况来分析。

lambda表达式中有一种流叫parallelSteam,这叫并行流。相对stream流来讲,对流的处理是并行处理,所以效率上肯定比单纯的for循环。不过并行流有个缺陷,就是易产生并发安全问题。所以这玩意还是慎用。

当然,stream流也有自己的优势,假如你有多个处理操作,比如过滤某个集合中特定条件的元素后将其进行转化后再遍历输出,此时涉及多个操作,如果用传统的for循环来做,则不如stream效率高。因为它封装了对集合进行操作的算法和方法,是从底层进行处理。如果只是一个遍历操作,两者效率上差别不是很大。

更关键的是,使用stream流可以使代码更简洁,虽然对老程序员不是很友好,但是你只要花点时间研究研究,你就会喜欢上这种写法。