当前位置: 首页 > news >正文

Java中for、foreach、stream区别和性能比较

文章目录

    • 性能比较
    • 区别
      • 使用方式和行为

性能比较

最终总结:如果数据在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 -> {});

相关文章:

Java中for、foreach、stream区别和性能比较

文章目录 性能比较区别使用方式和行为 性能比较 最终总结&#xff1a;如果数据在1万以内的话&#xff0c;for循环效率高于foreach和stream&#xff1b;如果数据量在10万的时候&#xff0c;stream效率最高&#xff0c;其次是foreach,最后是for。另外需要注意的是如果数据达到10…...

[CSS] 文本折行

文本折行一般分为两种情况&#xff1a; CJK&#xff08;Chinese/Japanese/Korean&#xff09; 字符和非 CJK 字符。一般非 CJK 字符折行发生在两个单词的空格中间&#xff0c;见下图&#xff1a; 图中文本 “hello world” 包裹容器的宽度为 2rem&#xff0c;但是 hello 并没有…...

033-从零搭建微服务-日志插件(一)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff08;后端&#xff09;&#xff1a;mingyue: &#x1f389; 基于 Spring Boot、Spring Cloud & Alibaba 的分布式微服务架构基础服务中心 源…...

短期经济波动:均衡国民收入决定理论(三)

短期经济波动&#xff1a;国民收入决定理论(三) 文章目录 短期经济波动&#xff1a;国民收入决定理论(三)[toc]1 总需求曲线及其变动1.1 总需求曲线含义1.2 总需求曲线推导1.2.1 代数推导1.2.2 几何推导 1.3 AD曲线及其变动1.3.1 扩张性财政政策1.3.2 扩张性货币政策 2 总供给曲…...

电力感知边缘计算网关产品设计方案-网关软件架构

边缘计算网关采用ARM定制硬件平台架构,包含上位机端(内网)和FPGA网关端(外网)两部分,通过芯片间的高速信号总线实现边缘计算网关工业数据采集、数据实时传输、数据存储、网关状态信息收集等功能。 边缘计算网关上位机端(内网)重点完成工业数据采集、业务软件运算、客户…...

最新AI创作系统ChatGPT系统运营源码/支持最新GPT-4-Turbo模型/支持DALL-E3文生图

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…...

Java使用Redis的几种客户端介绍

Redis是一种高性能的内存数据库&#xff0c;可以提供快速的数据读写操作。在Java中使用Redis&#xff0c;需要使用Redis客户端。目前&#xff0c;Java中常用的Redis客户端有以下几种&#xff1a; Jedis Jedis是Java中最流行的Redis客户端之一&#xff0c;它提供了丰富的API和…...

程序员的护城河

程序员的护城河 算法&#xff0c;一定是过硬的算法&#xff01;&#xff01;&#xff01;举个栗子&#xff1a;算法不硬吃大亏写在最后 算法&#xff0c;一定是过硬的算法&#xff01;&#xff01;&#xff01; 其实会什么技术不重要&#xff0c;掌握多少种编程语言也不重要&a…...

常见面试题-MySQL软删除以及索引结构

为什么 mysql 删了行记录&#xff0c;反而磁盘空间没有减少&#xff1f; 答&#xff1a; 在 mysql 中&#xff0c;当使用 delete 删除数据时&#xff0c;mysql 会将删除的数据标记为已删除&#xff0c;但是并不去磁盘上真正进行删除&#xff0c;而是在需要使用这片存储空间时…...

信号的机制——信号处理函数的注册

在 Linux 操作系统中&#xff0c;为了响应各种各样的事件&#xff0c;也是定义了非常多的信号。我们可以通过 kill -l 命令&#xff0c;查看所有的信号。 # kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP6) SIGABRT 7) SIGBUS …...

JS-项目实战-鼠标悬浮变手势(鼠标放单价上生效)

1、鼠标悬浮和离开事件.js //当页面加载完成后执行后面的匿名函数 window.onload function () {//get:获取 Element:元素 By:通过...方式//getElementById()根据id值获取某元素let fruitTbl document.getElementById("fruit_tbl");//table.rows:获取这个表格…...

redis运维(十一) python操作redis

一 python操作redis ① 安装pyredis redis常见错误 说明&#xff1a;由于redis服务器是5.0.8的,为了避免出现问题,默认最高版本的即可 --> 适配 ② 操作流程 核心&#xff1a;获取redis数据库连接对象 ③ Python 字符串前面加u,r,b的含义 原因&#xff1a; 字符串在…...

黑马程序员微服务 第五天课程 分布式搜索引擎2

分布式搜索引擎02 在昨天的学习中&#xff0c;我们已经导入了大量数据到elasticsearch中&#xff0c;实现了elasticsearch的数据存储功能。但elasticsearch最擅长的还是搜索和数据分析。 所以今天&#xff0c;我们研究下elasticsearch的数据搜索功能。我们会分别使用DSL和Res…...

什么是UV贴图?

UV 是与几何图形的顶点信息相对应的二维纹理坐标。UV 至关重要&#xff0c;因为它们提供了表面网格与图像纹理如何应用于该表面之间的联系。它们基本上是控制纹理上哪些像素对应于 3D 网格上的哪个顶点的标记点。它们在雕刻中也很重要。 为什么UV映射很重要&#xff1f; 默认情…...

从哪里下载 Oracle database 11g 软件

登入My Oracle Support&#xff0c;选择Patches & Updates 标签页&#xff0c;点击下方的Latest Patchsets链接&#xff1a; 然后单击Oracle Database&#xff0c;就可以下载11g软件了&#xff1a; 安装单实例数据库需要1和2两个zip文件&#xff0c;安装GI需要第3个zip文…...

Ingress安全网关

目录 文章目录 目录本节实战TCP 流量拆分&#x1f6a9; 实战&#xff1a;TCP 流量拆分-2023.11.15(测试成功) Ingress安全网关Kubernetes Ingress&#x1f6a9; 实战&#xff1a;Kubernetes Ingress-2023.11.15(测试成功) Ingress GatewayIngress Gateway&#x1f6a9; 实战&am…...

Jmeter控制RPS

一、前言 ​ RPS (Request Per Second)一般用来衡量服务端的吞吐量&#xff0c;相比于并发模式&#xff0c;更适合用来摸底服务端的性能。我们可以通过使用 JMeter 的常数吞吐量定时器来限制每个线程的RPS。对于RPS&#xff0c;我们可以把他理解为我们的TPS&#xff0c;我们就不…...

【Nginx】转发配置nginx.conf

文章目录 NginxNginx主要作用转发配置相关问题参考推荐阅读 Nginx Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器&#xff0c;同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.ru站点&#xff08;俄文&#xff1a;Рамбл…...

uniapp实现下载图片到本地

uniapp实现下载图片到本地 在uniapp开发中&#xff0c;可以使用uni.downloadFile方法实现下载文件功能&#xff0c;客户端直接发起一个 HTTP GET 请求&#xff0c;返回文件的本地临时路径。 const urlPath http://192.168.0.1:8080/fileApi/logo.png uni.downloadFile({url:…...

spring cloud-注册中心(Eureka)

一、服务注册中心组件(*) 定义&#xff1a;服务注册中心就是在整个微服务架构单独抽取一个服务&#xff0c;该服务不做项目中任何业务功能&#xff0c;仅用来在微服务中记录微服务、对微服务进行健康状态检查&#xff0c;及服务元数据信息存储常用的注册中心&#xff1a;eurek…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...