java中for、foreach、stream性能比较

2023-05-16

在开发中循环遍历一个数组经常会用到,jdk8推出了一些新特性,对循环做了比较,通过代码亲测,记录一下!

1、for循环

public static void main(String[] args) {
       Long startTime = System.currentTimeMillis();
    formMethod();
    Long endTime = System.currentTimeMillis();
    System.out.println("result:" + (endTime - startTime)); 
}

public static void formMethod(){
    for (int i = 0; i < 10000; i++) {
        System.out.println("start::::::::::::");
    } 
 }



2、foreach循环(for循环的增强版)

public static void main(String[] args) {
    List<Integer> list = new ArrayList<Integer>();
    for (int i = 0; i < 10000; i++) {
        list.add(i);
    }
    Long startTime = System.currentTimeMillis();
    foreachMethod(list);
    Long endTime = System.currentTimeMillis();
    System.out.println("result:" + (endTime - startTime));
}

/**
* foreach
* @param list
*/
public static void foreachMethod(List<Integer> list){
    list.forEach(i ->{
        System.out.println("++++++++++++");
    });
}


结论:通过代码测试发现在1万以内的数据,for循环比foreach效率要高一些;但是10万以内数据的时候,foreach效率更高一些!

foreach [10万数据时间 1112 1165 1203 1115] [1万数据 235 146 176 164 175]

for循环 [10万数据时间 1330 1437 1347] [1万数据 110 109 141]

3、stream api

(1)、串行处理,即同步处理

public static void main(String[] args) {
    List<Integer> list = new ArrayList<Integer>();
    for (int i = 0; i < 10000; i++) {
        list.add(i);
    }
    Long startTime = System.currentTimeMillis();
    streamMethod(list);
    Long endTime = System.currentTimeMillis();
    System.out.println("result:" + (endTime - startTime));
}

/**
* stream 串行处理
* @param list
*/
public static void streamMethod(List<Integer> list){
    list.stream().forEach(i ->{
        System.out.println("========");
    });
}


结论:1万以内的数据,for循环的性能要高于foreach和stream;10万以内的数据明显可以看出stream效率最高,其次foreach,最后是for。

[10万数据时间 854 892 789 844][1万数据 172 156 219 172 171]

(2)并行处理,即stream api提供了异步处理机制

public static void main(String[] args) {
    List<Integer> list = new ArrayList<Integer>();
    for (int i = 0; i < 10000; i++) {
        list.add(i);
    }
    Long startTime = System.currentTimeMillis();
    parallelStreamMethod(list);
    Long endTime = System.currentTimeMillis();
    System.out.println("result:" + (endTime - startTime));
}
/**
* stream 并行处理
* @param list
*/
public static void parallelStreamMethod(List<Integer> list){
    list.parallelStream().forEach(i ->{
        System.out.println("========");
    });
}



结论:1万以内的数据,for循环的性能要高于foreach和stream;10万以内的数据明显可以看出stream效率最高,其次foreach,最后是for。

[10万数据时间 893 844 914 972][1万数据 219 203 234 188 ]

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


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java中for、foreach、stream性能比较 的相关文章

随机推荐

  • BetaFlight深入传感设计之七:GPS&Baro高度数据融合

    BetaFlight深入传感设计之七 xff1a GPS amp Baro高度数据融合 1 现象2 分析2 1 程序逻辑2 2 GPS精度2 3 数值分析 3 总结 传感器数据融合最主要的目的是为了数据的精准 同时也可以通过多个传感数据源来
  • BetaFlight深入传感设计之八:坐标系

    BetaFlight深入传感设计之八 xff1a 坐标系 1 坐标系统应用1 1 Geographic Coordinate System LLH Longitude Latitude Height1 2 Navigation Coordi
  • 树莓派(Raspberry Pi)FTP服务搭建

    64 TOC 树莓派 Raspberry Pi FTP服务搭建 由于家里使用下载电影 迅雷 xff0c 存储电影 树莓派 43 移动硬盘 xff0c 简易NAS xff1b PC下载的电影可以通过家里的有线主干网络100MB带宽通过samb
  • 四轴飞控DIY Mark4 - 整理&参数优化

    四轴飞控DIY Mark4 整理 amp 参数优化 1 历程2 参数优化2 1 固件BF4 3 12 2 动态怠速值2 3 滤波参数2 4 电调PWM频率2 5 GPS高度配置2 6 返航速度和高度2 7 线性推力修正2 8 图传频道调整
  • BetaFlight深入传感设计之九:传感坐标系/机体坐标系/导航坐标系/经纬度坐标系

    BetaFlight深入传感设计之九 xff1a 传感坐标系 机体坐标系 导航坐标系 经纬度坐标系 1 问题症结2 入手分析2 1 传感坐标系2 2 机体坐标系2 3 导航坐标系2 4 经纬坐标系 3 CF BF iNav代码3 1 机体坐
  • BetaFlight深入传感设计之十:传感器物理特性方向对齐

    BetaFlight深入传感设计之十 xff1a 传感器物理特性方向对齐 1 对齐定义2 常见对齐方式3 自定义对齐方式4 总结5 参考资料6 补充 xff1a gyro 43 mag对齐方式 AHRS Attitude and Headi
  • ArduPilot飞控AOCODARC-H7DUAL固件编译

    ArduPilot飞控AOCODARC H743DUAL固件编译 1 编译目标 xff08 AOCODARC H743DUAL xff09 2 硬件支持包 xff08 APM AOCODARC H743DUAL xff09 3 编译步骤3
  • 四轴FPV手动训练进阶步骤

    四轴FPV手动训练进阶步骤 1 目的2 训练2 1 基本操作训练2 1 1 滞空训练2 1 2 基本动作2 1 3 位置保持 2 2 基本控制训练2 2 1 转弯 Turn 2 2 2 翻滚 Roll 2 2 3 翻转 Flips 2 3
  • 数据库binlog(二进制日志binary log)

    二进制日志中存储的内容称之为事件 xff0c 每一个数据库更新操作 Insert Update Delete xff0c 不包括Select 等都对应一个事件 mysql binlog基本原理 简书 jianshu com https ww
  • 四轴异常炸机分析讨论集锦

    四轴异常炸机分析讨论集锦 0 异常 amp 炸机 汇总目的1 AT9SPro 43 R12DSM 300米信号丢失炸机2 PID参数异常 起飞 Takeoff Runaway 炸机3 接收机信号干扰 炸机4 GPS救援 RC控制信号丢失炸机
  • Github工程中的Markdown语言应用

    Github工程中的Markdown语言应用 1 介绍2 工具2 1 下载链接2 2 编辑界面2 3 插件安装 3 基本操作3 1 标题编写3 2 正文编写3 3 代码块编写3 4 加粗倾斜3 5 有序列表3 6 无序列表3 7 行内代码编
  • iNavFlight之MSP DJI协议分析

    iNavFlight之MSP DJI协议分析 1 iNav串行口通信1 1 iNav 串口任务1 2 调用逻辑 2 iNav串行抽象2 1 框架代码2 2 MSP DJI 协议处理 3 DJI协议相关实现3 1 DJI串口初始化3 2 DJ
  • iNavFlight之MSP DJI协议天空端请求报文

    iNavFlight之MSP DJI协议天空端请求报文 1 报文格式 请求 2 报文标志 flag 3 报文命令 cmd 4 参考资料 MSP DJI协议是用于DJI天空端与飞控端之间的通信协议 xff0c 其工作模式符合C S经典设计 这
  • iNavFlight之MSP DJI协议飞控端请求应答

    iNavFlight之MSP DJI协议飞控端请求应答 1 报文格式2 报文标志 flag 3 报文命令 cmd 4 请求应答 amp 反馈报文4 1 DJI MSP API VERSION4 2 DJI MSP FC VARIANT4 3
  • 大疆Tello UDP控制协议接口

    大疆Tello UDP控制协议接口 1 设计架构2 UDP报文格式2 1 控制报文2 2 查询报文2 3 状态报文 3 命令集3 1 控制报文 控制命令3 2 控制报文 设置命令3 3 查询报文 读取命令 4 状态报文 这里介绍了大疆Tel
  • 蓝牙无线自制串口模块连接穿越机配置工具

    蓝牙无线自制串口模块连接穿越机配置工具 1 目的2 验证环境3 BLE SPP验证4 BT SPP验证5 参考资料6 补充资料 windows10配置全过程截图6 1 添加设备 搜索蓝牙串口设备6 2 连接 选中SnapAirUnit设备6
  • 传感模块:MATEKSYS Optical Flow & LIDAR 3901-L0X

    传感模块 xff1a MATEKSYS Optical Flow amp LIDAR 3901 L0X 1 模块介绍2 规格参数3 使用方法Step1 接线方式Step2 安装方式Step3 使用范围 4 存在问题 思考 4 1 MATEK
  • iNavFlight之MSP v2 Sensor报文格式

    iNavFlight之MSP v2 Sensor报文格式 1 MSP v2传感报文介绍2 MSP v2协议格式3 MSP v2传感代码流程4 MSP v2 传感器4 1 光流传感报文 MSP2 SENSOR RANGEFINDER4 2 测
  • 自制肥鲨HDO2电源降压延长线,支持3S~6S动力电池

    自制肥鲨HDO2电源降压延长线 xff0c 支持3S 6S动力电池 1 问题源由2 破题思路2 1 10元大钞搞定2 2 两个毛爷爷搞定 3 解决方案4 最终延长线产出4 1 裸照4 2 成品 5 花絮6 参考资料 1 问题源由 源由 xf
  • java中for、foreach、stream性能比较

    在开发中循环遍历一个数组经常会用到 xff0c jdk8推出了一些新特性 xff0c 对循环做了比较 xff0c 通过代码亲测 xff0c 记录一下 xff01 1 for循环 public static void main String