你没有见过的 7 种 for 循环优化,超好用!

来源:blog.csdn.net/csdn_aiyang/article/details/75162134

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

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

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

常规写法

for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));
}
  • 优点:较常见,易于理解

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

优化1:数组长度提取出来

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

  • 缺点:

    • m的作用域不够小,违反了最小作用域原则;

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

优化2:数组长度提取出来

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

  • 缺点:

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

优化3:采用倒序的写法

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

  • 缺点:

    • 结果的顺序会反;

    • 看起来不习惯,不易读懂。

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

遍历

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

优化4:优化遍历

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

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

优化5:循环嵌套外小内大原则

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

原因:嵌套循环应该遵循“外小内大”的原则,这就好比你复制很多个小文件和复制几个大文件的区别,复制很多小文件速度是很慢的,而复制几个大文件速度则快很多。

优化6:循环嵌套提取不需要循环的逻辑

 //前: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;}

优化7:异常处理写在循环外面

反例

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

正例

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


往期推荐

死锁的 4 种排查工具 !


图解:为什么非公平锁的性能更高?


ReentrantLock 中的 4 个坑!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/544609.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

死锁终结者:顺序锁和轮询锁!

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone死锁&#xff08;Dead Lock&#xff09;指的是两个或两个以上的运算单元&#xff08;进程、线程或协程&#xff09;&#xff0c;都在等待…

轮询锁使用时遇到的问题与解决方案!

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone当我们遇到死锁之后&#xff0c;除了可以手动重启程序解决之外&#xff0c;还可以考虑是使用顺序锁和轮询锁&#xff0c;这部分的内容可以…

16 条 yyds 的代码规范

作者 | 涛姐涛哥链接 | cnblogs.com/taojietaoge/p/11575376.html背景&#xff1a;如何更规范化编写Java 代码的重要性想必毋需多言&#xff0c;其中最重要的几点当属提高代码性能、使代码远离Bug、令代码更优雅。一、MyBatis 不要为了多个查询条件而写 1 1当遇到多个查询条件…

C# 导出word文档及批量导出word文档(3)

在初始化WordHelper时&#xff0c;要获取模板的相对路径。获取文档的相对路径多个地方要用到&#xff0c;比如批量导出时要先保存文件到指定路径下&#xff0c;再压缩打包下载&#xff0c;所以专门写了个关于获取文档的相对路径的类。 1 #region 获取文档的相对路径2 pub…

再见收费的 XShell,我改用国产良心工具!

使用或维护Linux系统的都知道&#xff0c;我们日常对服务器的操作&#xff0c;一般都会借助SSH工具远程登录到服务器之后进行操作。常用的SSH工具有不少&#xff0c;比如&#xff1a;Xshell、Putty、SSH Secure Shell Client、secureCRT等等。我使用过其中两种secureCRT和Xshel…

全球六大国际域名解析量统计报告(6月25日)

IDC评述网&#xff08;idcps.com&#xff09;06月29日报道&#xff1a;根据DailyChanges公布的实时数据显示&#xff0c;在2015年6月25日&#xff0c;全球六大国际域名解析量总量持续攀升至153,246,819个&#xff0c;环比6月16日&#xff0c;净增46,078个&#xff0c;涨幅增大3…

Windows 创建符号链接

一、场景分析 1.环境变量 在Windows系统配置 环境变量 的时候&#xff0c;经常会遇到以下 路径 情况&#xff1a; C:\Program Files C:\Program Files (x86)\Common Files2.异常情况 这种路径中&#xff0c;存在空格字符&#xff0c;在一些程序调用时&#xff0c;可能出现异…

1.3w字,一文详解死锁!

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone死锁&#xff08;Dead Lock&#xff09;指的是两个或两个以上的运算单元&#xff08;进程、线程或协程&#xff09;&#xff0c;都在等待…

PHP与ThinkPHP读写文件

2019独角兽企业重金招聘Python工程师标准>>> 使用php将数据写入到指定的文件 $str"<?php return".var_export($phiz,true)."?>"; file_put_contents(./Data/phiz.php); 使用php读取指定的文件 …

【图解】透彻Java线程状态转换

大家好&#xff0c;我是阿星&#xff0c;好久不见&#xff0c;欢迎来到Java并发编程系列番外篇线程状态转换&#xff0c;内容通俗易懂&#xff0c;请放心食用。线程状态先来个开场四连问Java线程状态有几个&#xff1f;Java线程状态是如何转换&#xff1f;Java线程状态转换什么…

CentOS7安装Hadoop2.7完整流程

2019独角兽企业重金招聘Python工程师标准>>> 1、环境&#xff0c;3台CentOS7&#xff0c;64位&#xff0c;Hadoop2.7需要64位Linux&#xff0c;CentOS7 Minimal的ISO文件只有600M&#xff0c;操作系统十几分钟就可以安装完成&#xff0c; Master 192.168.0.182 Slav…

如果不这样用,Nacos也有安全问题!

前言配置管理作为软件开发中重要的一环&#xff0c;肩负着连接 代码和环境的职责&#xff0c;能很好的分离开发人员和维护人员的关注点。Nacos 的配置管理功能就很好地满足了云原生应用对于配置管理的需求&#xff1a;既能做到配置和代码分离&#xff0c;也能做到配置的动态…

聊聊Spring事务失效的12种场景,太坑了

前言对于从事java开发工作的同学来说&#xff0c;spring的事务肯定再熟悉不过了。在某些业务场景下&#xff0c;如果一个请求中&#xff0c;需要同时写入多张表的数据。为了保证操作的原子性&#xff08;要么同时成功&#xff0c;要么同时失败&#xff09;&#xff0c;避免数据…

什么是可中断锁?有什么用?怎么实现?

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone在 Java 中有两种锁&#xff0c;一种是内置锁 synchronized&#xff0c;一种是显示锁 Lock&#xff0c;其中 Lock 锁是可中断锁&#xff…

10个经典又容易被人疏忽的JVM面试题

前言整理了10个经典又容易被疏忽的JVM面试题&#xff0c;谢谢阅读&#xff0c;大家加油哈.1. 对象一定分配在堆中吗&#xff1f;有没有了解逃逸分析技术&#xff1f;「对象一定分配在堆中吗&#xff1f;」 不一定的&#xff0c;JVM通过「逃逸分析」&#xff0c;那些逃不出方法的…

面试官:怎么解决MySQL中的死锁问题?

咱们使用 MySQL 大概率上都会遇到死锁问题&#xff0c;这实在是个令人非常头痛的问题。本文将会对死锁进行相应介绍&#xff0c;对常见的死锁案例进行相关分析与探讨&#xff0c;以及如何去尽可能避免死锁给出一些建议。话不多说&#xff0c;开整&#xff01;什么是死锁死锁是并…

ubuntu双系统导致进windows花屏

2019独角兽企业重金招聘Python工程师标准>>> 5600U的集成显卡&#xff0c;装了ubuntu的双系统&#xff0c;居然导致进win7的时候花屏&#xff0c;度娘狗哥都不得求解 网上很多解决方法都说在启动时加上nomodeset&#xff0c;发现对ubuntu15没用&#xff0c;且失去了…

工作总结:日志打印的15个建议

前言 日志是快速定位问题的好帮手&#xff0c;是撕逼和甩锅的利器&#xff01;打印好日志非常重要。今天我们来聊聊日志打印的15个好建议~1. 选择恰当的日志级别 常见的日志级别有5种&#xff0c;分别是error、warn、info、debug、trace。日常开发中&#xff0c;我们需要选择恰…

MFC属性页对话框

属性页对话框 分类 分页和引导 类 CPropertyPage-父亲CDialog类别&#xff0c;所谓的属性页或网页对话框。 CPropertySheet-父类是CWnd&#xff0c;称为属性表单。 一个完整的属性页对话框由一个属性表单多个属性页组成。属性页嵌套在属性表单内。 标签式属性页的创建步骤&…

面试官:ConcurrentHashMap为什么放弃了分段锁?

今天我们来讨论一下一个比较经典的面试题就是 ConcurrentHashMap 为什么放弃使用了分段锁&#xff0c;这个面试题阿粉相信很多人肯定觉得有点头疼&#xff0c;因为很少有人在开发中去研究这块的内容&#xff0c;今天阿粉就来给大家讲一下这个 ConcurrentHashMap 为什么在 JDK8 …