Java中for、foreach、stream区别和性能比较_.stream().foreach-程序员宅基地

技术标签: java  Java基础  

性能比较

最终总结:如果数据在1万以内的话,for循环效率高于foreach和stream;如果数据量在10万的时候,stream效率最高,其次是foreach,最后是for。另外需要注意的是如果数据达到100万的话,parallelStream异步并行处理效率最高,高于foreach和for。

在效率方面,stream().forEach、forEach 和 parallelStream 之间存在一些差异。

  1. stream().forEach:
    ○ 在处理大量数据时,使用 stream().forEach 可能会比普通的 forEach 更高效。这是因为 stream().forEach 可以使用流式操作,对数据进行更优化的处理,例如通过并行流或者其他优化手段来提高处理速度。
    ○ 但是需要注意的是,stream().forEach 也可能会引入一些额外的性能开销,比如流的创建和操作过程中的一些额外计算。
  2. forEach:
    ○ forEach 方法是集合类的默认方法,它通常会按照集合内部的数据结构进行遍历,不涉及额外的流式操作或并行处理。因此,在某些情况下,forEach 可能会比 stream().forEach 更加高效。
  3. parallelStream:
    ○ parallelStream 方法可以在处理大量数据时提供更高的效率,因为它可以利用多核处理器并行处理数据。在某些情况下,特别是对于需要并行处理的大型数据集合,使用 parallelStream 可能会比顺序处理更加高效。
    ○ 然而,并行处理也可能引入一些额外的开销,比如线程调度、同步等,因此并不是所有情况下都适合使用 parallelStream。
    总的来说,对于数据量较小的情况,forEach 和 stream().forEach 的性能差异可能并不明显;而对于大型数据集合或需要并行处理的情况,考虑使用 parallelStream 可能会更加高效。在实际应用中,可以根据具体情况进行性能测试和选择合适的方法。

区别

在Java中,forEach 方法是用来对集合中的每个元素执行特定操作的方法。stream().forEach 和 forEach 方法都可以使用在集合类上,但是有一些区别。

  1. stream().forEach:
    ○ stream().forEach 是针对 Stream 接口的方法,它通过创建一个流(Stream)来操作集合中的元素。这意味着它可以对集合进行更灵活的操作,比如筛选、映射和过滤等。
    ○ 使用 stream().forEach 可以让操作变得更加函数式和流畅,可以方便地进行各种中间操作和终端操作。
  2. forEach:
    ○ forEach 是 Iterable 接口中的默认方法,因此几乎所有的集合类都支持 forEach 方法。
    ○ forEach 方法是串行执行的,即对集合中的每个元素依次执行指定的操作。这意味着它不能并行处理集合中的元素。
  3. parallelStream:
    ○ parallelStream 是 Collection 接口中新增的方法,它可以将集合转换成并行流,从而允许在多个线程上并行处理集合中的元素。
    ○ 与普通的 stream() 方法相比,parallelStream 方法可以提高处理大量数据时的效率,因为它可以利用多核处理器并行处理数据。
    因此,stream().forEach 提供了更多的灵活性和功能性,可以结合流式操作来对集合进行处理;而 forEach 和 parallelStream 则是集合类提供的简单遍历和并行处理的方法。

使用方式和行为

stream().forEach() 和 forEach() 在使用方式和行为上有一些区别。

  1. stream().forEach():
    ○ stream().forEach() 是流(Stream)API 的操作,用于对流中的每个元素执行给定的操作。
    ○ 它是一个终端操作,用于触发流的遍历和操作。
    ○ stream().forEach() 可以接收一个 lambda 表达式或方法引用作为参数,用于定义要执行的操作。
    ○ 它可以在串行流或并行流上执行操作,如果使用并行流,在多线程情况下可以实现更高的处理效率。
    ○ stream().forEach() 不保证元素的遍历顺序,可能是无序的。
  2. forEach():
    ○ forEach() 是 Iterable 接口的默认方法,用于对集合中的每个元素执行给定的操作。
    ○ 它是一个终端操作,用于触发集合的遍历和操作。
    ○ forEach() 可以接收一个 lambda 表达式或方法引用作为参数,用于定义要执行的操作。
    ○ 它在单线程下按照集合的顺序依次遍历元素执行操作。
    ○ forEach() 保证按照集合元素的顺序执行操作,并且保持了元素的顺序性。
    总体而言,stream().forEach() 主要用于流的操作,可以进行并行处理和无序遍历,适用于处理复杂的数据、并行操作和无序操作的场景。而 forEach() 则主要用于对集合进行遍历,并且保持了元素的顺序性,适用于简单的遍历操作。
fori
for (int i = 0; i < objects.size(); i++) {
    }
foreach
for (Object o : objects) {
    }
fori最普通的循环,可以时候得到当前的索引位置。
 
foreach 和fori区别不大,foreach是普通fori的增强版用起来更方便。但是没有当前索引。
1.list的遍历  
方法一:itli  或者fori
for (int i = 0; i < list3.size(); i++) {
    
  Integer integer =  list3.get(i);
}
方法二:iter
for (Integer integer : list3) {
    
  
}
方法三:forEach
list.forEach(o->{
    });

方法四:stream().forEach
list.stream()
    .forEach(
        o -> {
    
        });
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Fireworkit/article/details/134472334

智能推荐

python程序员入职第一天_看不懂代码,不会用框架,新手程序员入职后如何快速上手项目?...-程序员宅基地

文章浏览阅读949次,点赞2次,收藏3次。大家好,我是良许。对于职场新人,特别是应届毕业生,他们拿到offer之后,进入公司后会有一段时间的焦虑感。比如说,不懂公司项目开发流程,代码看不懂,业务流程也不知道,框架不会用,等等还有各种各样的问题。所以很多人一开始都会在担心自己能不能胜任这个职位,会不会连试用期都过不了。其实这个心态是很常见的,每个程序员应该都会经历这么一个过程。就拿我自己来说吧,由于我是自学转行的,我的技术本身就比那些科班出..._进入公司不会写python怎么办

关于ffmpeg中rtmp无法设置超时时间的bug修复_ffmpeg rtmp 超时设置-程序员宅基地

文章浏览阅读1.1k次。AVDictionary* options = nullptr; av_dict_set(&options, "timeout", "3000000", 0); //设置超时断开连接时间 if (avformat_open_input(&pFormatCtx, url, NULL, &options) != 0) { printf("Couldn't open input stream.(无法打开输入流)\n"); ret..._ffmpeg rtmp 超时设置

关于google浏览器的xpath选择器插件使用总结_selectorshub-程序员宅基地

文章浏览阅读1.7k次。在谷歌商店中评分比较高的xpath插件有XPath Helper(Chrome)SelectorsHub(Chrome)说下两者的使用情况XPath Helper(Chrome) 应该是国内使用比较多的,但是他基本上都是快捷键操作,和我的电脑的快捷键设置有冲突,故而他在我的电脑上是很不好用的,但是它简单易用,很灵活,浏览器开销也比较小,SelectorsHub(Chrome)是在我的快捷键有冲突之后,开代理上商店里边比较出来的一块很好用的xpath插件但是对于浏览器的开销相对要大很多_selectorshub

nginx 命令 启动 停止_ngix 开启结束命令-程序员宅基地

文章浏览阅读399次。启动操作命令:nginx -c /usr/nginx/conf/nginx.conf-c参数指定了要加载的nginx配置文件 路径。停止操作停止操作是通过向nginx进程发送信号(什么是信号请参阅linux文章)来进行的步骤1:查询nginx主进程号ps -ef | grep nginx在进程列表里 面找master进程,它的编号就是主进程号了。步骤2:发送_ngix 开启结束命令

Qlik十月版本带你体验最新的外观主题!_qlik在线体验-程序员宅基地

文章浏览阅读169次。在十月份发布的版本中,Qlik对用户自定义其云分析体验带来了新的可能性。新的图表监控增强功能和对集合的更轻松访问使用户可以直接从云中心轻松组织和访问其最关键的见解和可视化。全新的默认主题提供了更好,外观更现代的应用程序。此版本还包括通过Qlik DataTransfer扩展的数据连接选项,数据重新加载管理以及具有JWT授权的新身份管理配置选项。自定义您的中心和更快地访问关键见解图表监控增强用户拥有更多选择,可以直接从云中心监视最重要的图表。现在,除了用户创建的图表外,用户还可以选择由Insigh_qlik在线体验

java.lang.NoClassDefFoundError: org/apache/tez/dag/api/SessionNotRunning-程序员宅基地

文章浏览阅读7k次,点赞7次,收藏4次。IDEA编写程序:spark SQL连接 hive报错:java.lang.NoClassDefFoundError: org/apache/tez/dag/api/SessionNotRunning我的问题出现在:方法一:把hive-site.xml拷贝到idea的resources中后,hive-site.xml中的一个配置需要改:简单来说,把 “hive.execution.eng..._java.lang.noclassdeffounderror: org/apache/tez/dag/api/sessionnotrunning

随便推点

图解TensorFlow op:tf.nn.space_to_depth_space-to-depth-程序员宅基地

文章浏览阅读4.9k次,点赞15次,收藏22次。田海立@CSDN 2020-10-20TensorFlow算子space_to_depth是depth_to_space的逆操作。本文用图文的方式来解释该算子运算的方式。一、space_to_depth原型space_to_depth是把space数据(width和height维)移到depth(Channel)维上,与depth_to_space刚好是反向的操作。对应到ML该操作是把width和height维上各取block_size都分给depth上。所以,对应有一个参数block_s._space-to-depth

找不到 cl.exe 解决办法-程序员宅基地

文章浏览阅读1.7w次,点赞32次,收藏64次。._cl.exe

(Linux)kill命令常用技巧_kill -g-程序员宅基地

文章浏览阅读4.6w次,点赞14次,收藏98次。前言在Linux的系统中,kill是我们最常见的命令之一。 kill,英语中为杀死的意思,顾名思义,就是用来杀死一些东西的命令,常用来杀死系统中的进程。就像是Windows系统中的关闭软件的按钮,不过kill最直接,从后台直接停止。下面就介绍一下,kill是如何杀死进程的。kill命令的参数在Linux系统中命令都是有参数的,这给了我们很多的选择,但是kill的重..._kill -g

用inkscape临摹logo_inkscape 画平行四边形-程序员宅基地

文章浏览阅读470次。《用inlscape临摹太极图logo》_inkscape 画平行四边形

实现哈希表的相关运算算法_建立关键字序列(16,74,60,43,54,90,46,31,29,88,77)对应的哈希表a[0-程序员宅基地

文章浏览阅读5.4k次,点赞4次,收藏52次。/*** 实验题目:* 实现哈希表的相关运算算法* 实验目的:* 领会哈希表的构造和查找过程及其相关算法设计* 实验内容:* 设计程序,实现哈希表的相关运算,并完成如下功能:* 1、建立关键字序列(16, 74, 60, 43, 54, 90, 46, 31, 29, 88, 77)对应的哈希* 表A[0..1..._建立关键字序列(16,74,60,43,54,90,46,31,29,88,77)对应的哈希表a[0..12],哈希函

部署Kubernetes kube-apiserver启动失败_kube-apiserver.service holdoff time over, scheduli-程序员宅基地

文章浏览阅读3.4w次,点赞2次,收藏6次。systemctl restart kube-apiserver启动失败[root@centos-master yum.repos.d]# systemctl status kube-apiserver.service● kube-apiserver.service - Kubernetes API Server Loaded: loaded (/usr/lib/systemd/syst..._kube-apiserver.service holdoff time over, scheduling restart.

推荐文章

热门文章

相关标签