你真的会写for循环吗?常见for循环优化实践!

for循环的优化方式、循环的种类、使用及平替方案。 System.out.println("递归: " + current);// 递归调用特点:适合处理较为复杂的数据场景,可以无限套娃直到数据被完全处理或满足需求结束。 阅读详情

前言

我们都经常使用一些循环耗时计算的操作,特别是for循环,它是一种重复计算的操作,如果处理不好,耗时就比较大,如果处理书写得当将大大提高效率,下面总结几条for循环的常见优化方式。

首先,我们初始化一个集合 list,如下:

List<String> list = new ArrayList<String>();

方法一:最常规的不加思考的写法

for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
}
  • 优点:较常见,易于理解。java技术进阶路线:https://www.yoodb.com/

  • 缺点:每次都要计算list.size()

方法二:数组长度提取出来

int m = list.size();
for (int i = 0; i < m; i++) {
    System.out.println(list.get(i));
}
  • 优点:不必每次都计算

  • 缺点:

  1)m的作用域不够小,违反了最小作用域原则

  2)不能在for循环中操作list的大小,比如除去或新加一个元素

方法三:数组长度提取出来

for (int i = 0, n = list.size(); i < n; i++) {
    System.out.println(list.get(i));
}
  • 优点:不必每次都计算 ,变量的作用域遵循最小范围原则

  • 缺点:

  1)m的作用域不够小,违反了最小作用域原则

  2)不能在for循环中操作list的大小,比如除去或新加一个元素

方法四:采用倒序的写法

for (int i = list.size() - 1; i >= 0; i--) {
    System.out.println(list.get(i));
}
  • 优点:不必每次都计算 ,变量的作用域遵循最小范围原则

  • 缺点:1、结果的顺序会反 2、看起来不习惯,不易读懂

  • 适用场合:与显示结果顺序无关的地方:比如保存之前数据的校验

方法五:Iterator 遍历

for (Iterator<String> it = list.iterator(); it.hasNext();) {
    System.out.println(it.next());
}
  • 优点:简洁

方法六:jdk1.5后的写法

for (Object o : list) {
     System.out.println(o);
}
  • 优点:简洁结合泛型使用更简洁

  • 缺点:jdk1.4向下不兼容

方法七:循环嵌套外小内大原则

for (int i = 0; i < 10; i++) {
   for (int j = 0; j < 10000; j++) {
   }
}

原因

方法八:循环嵌套提取不需要循环的逻辑

 //前:
 int a = 10, b = 11;
  for (int i = 0; i < 10; i++) {
               i = i * a * b;
   } 
//后:
 int c = a * b;
 for (int i = 0; i < 10; i++) {
         i = i * c;
  }

方法九:异常处理写在循环外面

反例

for (int i = 0; i < 10; i++) {
     try {
     } catch (Exception e) {
     }
}

正例

try {
   for (int i = 0; i < 10; i++) {
   }
} catch (Exception e) {
}
Java for循环嵌套for循环,你需要懂的代码性能优化技巧 Java for循环嵌套for循环 性能优化 阅读详情

相关推荐

Java for循环性能优化实现解析

主要介绍了Java for循环性能优化实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

java--for循环java多线程优化

线程池优化for循环--java

weixin_44951291的博客 3168

浙政钉H5应用上架实战:从环境配置到发布避坑指南

本文详细解析浙政钉H5应用上架全流程,从环境配置到发布避坑指南。重点介绍Vue 2.6 + Node 14.21.3的稳定开发环境搭建、项目结构规范及常见报错解决方案,帮助开发者高效完成浙政钉H5应用上架流程。

weixin_27943395的博客 286

【性能】【算法】for循环,性能提高

在计算阶乘的过程中,循环结构通常会引入条件分支,用于判断循环是否继续。当分支预测(branch prediction)失败时,CPU的流水线会发生停顿,等待分支判断结果返回。这会导致流水线中断,浪费了一些CPU周期。 ---- 而如果采用展开循环的方式,即在代码中展开多个循环迭代,相当于将多个循环迭代的结果直接写入代码中。这样就避免了循环和条件分支的存在,减少了分支预测失败的机会,减少了流水线停顿。

sun0322 2144

Thompson Sampling vs UCB:5个真实业务场景下的算法选型指南

本文深入对比了Thompson Sampling与UCB算法在电商推荐、在线广告、医疗试验、金融定价和游戏调整五大真实业务场景下的表现。通过量化指标分析,为技术决策者提供了清晰的选型指南:Thompson Sampling凭借其概率匹配和贝叶斯框架,在需要快速收敛、处理冷启动及复杂约束的场景中通常更具优势;而UCB则在要求确定性、可解释性和理论保证的场景下表现更佳。

weixin_29181861的博客 153

第七天 Labview进阶(7.4 NI Vision简单使用)

NIVision机器视觉软件使用指南 摘要:NIVision是National Instruments推出的高效机器视觉软件,具有硬件无缝集成、图形化编程和工业级部署等优势。本文介绍了NIVision的安装步骤(需Vision Acquisition和Vision Development模块)及三个典型应用案例:1)实物检测通过IMAQCreate等模块实现物体识别与坐标定位;2)OCR检测利用IMAQOCR系列模块完成字符识别;3)几何模板匹配使用IMAQLearnGeometricPattern等模块实

weixin_38637405的博客 771

你真的会写for循环吗?来看看这些常见的for循环优化方式

学完之后,若是想验收效果如何,其实最好的方法就是可自己去总结一下。比如我就会在学习完一个东西之后自己去手绘一份xmind文件的知识梳理大纲脑图,这样也可方便后续的复习,且都是自己的理解,相信随便瞟几眼就能迅速过完整个知识,脑补回来。下方即为我手绘的MyBtis知识脑图,由于是xmind文件,不好上传,所以小编将其以图片形式导出来传在此处,细节方面不是特别清晰。但可给感兴趣的朋友提供完整的MyBtis知识脑图原件(包括上方的面试解析xmind文档)

2301_79655576的博客 1073

Arduino ESP32 Web服务器从microSD卡读取

Arduino ESP32 Web服务器从microSD卡读取 将网页内容放到SD卡中,当有客户端数据请求时,从SD卡读取信息进行发送,比起SPIFFS文件系统,更节约板上的硬件资源。 SD卡接线说明 ESP32----- SD D5(GPIO 5)-----CS D18(GPIO 18)-----SCK D19(GPIO 19)-----MISO D23()GPIO 23-----MOSI 文件放置 需要把文件放置到SD卡的根目录下。注意SD卡的格式FAT32格式。 实例代码 /*

perseverance51博客 1434

你真的会写 for 循环吗?来看看常见的 for 循环优化方式

点击上方“Java精选”,选择“设为星标”别问别人为什么,多问自己凭什么!下方留言必回,有问必答!每天08:00更新文章,每天进步一点点...前言我们都经常使用一些循环耗时计算的操作,...

Java精选 266

hwasan实例分析踩内存之一:camx进程stack tag-mismatch的三种解决方案

hwasan实例分析踩内存之一:camx进程stack tag-mismatch的三种解决方案。

1291

YOLO-V8训练自己的数据集之标注样本

四、标注样本 4.1、标注样本概述 4.1.1、样本标注主要方法 4.1.2、标注样本概念 4.1.3、标注样本实现方式 4.1.4、常见标注样本软件 4.2、标注工具LabelImg 4.2.1、LabelImg介绍 4.2.2、LabelImg特点 4.2.3、LabelImg安装方法 4.2.4、LabelImg使用方法 4.3、标注样本实操 4.3.1、安装标注软件Labelimg 4.3.2、Labelimg界面介绍 4.3.3、LabelImg实操过程中常

qq_29633789的博客 664

for循环之性能优化

前言 for循环是开发时常用的语法之一,比如对数组,集合的遍历等,但是如果使用不好也会出现很多新能损耗的问题,今天就来讲解一下for循环的常用性能优化问题。 嵌套循环 嵌套循环是有俩层或者俩层以上的循环嵌套在一起,下面直接上代码说明。 外大内小嵌套: /** * 大循环驱动小循环(即外大内小) */ private static void bigSmall...

hirezy 2万+

【QNX+Android虚拟化方案】12 - 设备虚拟化 之 Passthrough透传、Vdev Trap、HAB Socket 原理解析

【QNX+Android虚拟化方案】12 - 设备虚拟化 之 Passthrough透传、Vdev Trap、HAB Socket 原理解析

|~~~热爱生活、努力学习的小伙汁~~~| 1371

你的for循环真的高效吗——优化for循环第一章

在我们所写的程序中,几乎没有不用到for循环的,但是,对于for循环,很多人确实效率很低的,包括我看得很多代码,for循环的执行效率非常低,下面我就举个例子来说明:#include char *string="zhangbo"; int main(int argc,char **argv) { int i; for(i=0;i这个上边的程序程序我想大家都明白,那我问问读者,你知道这个程序的效率是多少吗?你肯定不屑的说,不就是n吗?其实,你错了,你说的n只是在算法层面上的优化,其实对于底

飞在天空的鱼 1万+

西门子S7-1200PLC控制步进电机的组态编程和具体步骤

西门子S7-1200PLC控制步进电机的组态编程和具体步骤 硬件准备: 1) 一个S7-1214C DC/DC/DC,订货号:6ES7 214-1AG40-0XB0 2) 一个86系的步进电机+相应的驱动器 3) 一个20A的西门子24V电源(步进驱动器及plc电源) 4) Portal V15版本 组态及编程: 1) 创建一个验证项目,添加cpu( S7-1214C),双击“工艺对象”,选择“运动控制”的TO_PositioningAxis V6.0版本,如下图所示: 2) “确定”后,系统自动生成名

Robot_PLC_HMI_Automation 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

c++ 对for循环的并行优化例子

什么是并行优化? 并行优化是代码优化的基本方法,从大到小一共可以分成三级:异步框架;任务并行;数据并行。在实际工作中,一般是先设计异步框架,包括异步处理任务以及异步任务的异构化等;第二步一般是做数据并行优化(SIMD),利用CPU的向量指令来对多条数据并行处理;这两步是代码优化的重心,一般做完这两步,系统性能会有明显的提升。今天要讨论的是第三步,for循环的并行优化。与前两者不同的是,for循环...

gaussrieman123的博客 3万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

你真的会写 for 循环吗?来看看这些常见的 for 循环优化方式

点击上方“Java基基”,选择“设为星标”做积极的人,而不是积极废人!每天14:00更新文章,每天掉亿点点头发...源码精品专栏原创 | Java 2021超神之路,很肝~中文详细...

weixin_44421461的博客 114

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

常见For 循环优化方式总结

首先,我们初始化一个集合 list,如下: List<String> list = new ArrayList<String>(); 方法一:最常规的不加思考的写法 优点:较常见,易于理解 缺点:每次都要计算list.size() for (int i = 0; i < list.size(); i++) { System.out.print...

ywyngq的博客 1626
上一篇: 打脸了!微软发布自己的Linux!
下一篇: 作大死!Firefox 强制弹出全屏广告惹众怒
IT界那些事儿
博客等级 码龄6年 2万+粉丝 22原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值