你没有见过的 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 valueof_Java Short类valueOf()方法及示例

java valueofSyntax: 句法&#xff1a; public static Short valueOf (short value);public static Short valueOf (String value);public static Short valueOf (String value, int radixs);简短的类valueOf()方法 (Short class valueOf() method) valueOf() method is avail…

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

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

Nginx For Windows HTTP转发和负载

Nginx For Windows HTTP转发和负载一、需求说明二、配置文件一、需求说明 使用Nginx进行端口转发&#xff0c;并且负载到两台服务器的服务上。 监控本地服务器的 9099 端口&#xff0c;转发并负载到 127.0.0.1:9001 和 127.0.0.1:9002 服务上。&#xff08;可以选择只转发到一…

Java PushbackReader mark()方法与示例

PushbackReader类mark()方法 (PushbackReader Class mark() method) mark() method is available in java.io package. mark()方法在java.io包中可用。 mark() method is used to mark the current position in this stream and this method throws an exception during the ca…

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

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

DHCP 日志分析

DHCP 日志分析 DHCP&#xff08;Dynamic Host Configuration Protocol&#xff0c;动态主机配置协议&#xff09;是一种有效的IP 地址分配手段&#xff0c;现已经被广泛地应用在各种局域网管理。它能动态地向网络中每台计算机分配唯一的IP 地址&#xff0c;并提供安全、可靠、简…

Nginx For Windows Socket 端口转发

Nginx For Windows Socket 端口转发一、需求说明二、配置文件一、需求说明 使用Nginx进行端口转发 Socket 端口通信。 监控本地服务器的 3001 端口&#xff0c;转发到 10.73.60.48:3001 服务器上的 Socket 端口服务。 二、配置文件 完整配置文件如下&#xff0c;测试可用 #…

16 条 yyds 的代码规范

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

linkedhashset_Java LinkedHashSet clear()方法与示例

linkedhashsetLinkedHashSet类的clear()方法 (LinkedHashSet Class clear() method) clear() method is available in java.util package. clear()方法在java.util包中可用。 clear() method is used to clear all of the existing objects in this LinkedHashSet. clear()方法…

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

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

Nginx For Windows 路由配置

Nginx For Windows 路由配置一、路由配置说明二、需求说明三、配置文件一、路由配置说明 使用Nginx进行路由配置。 使用过 SpringCloud 网关的同学都知道&#xff0c;网关可以使用同一IP地址、同一端口号、不同的服务ID&#xff0c;转发不同服务API信息&#xff0c;不会出现跨…

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

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

Java IdentityHashMap put()方法与示例

IdentityHashMap类的put()方法 (IdentityHashMap Class put() method) put() method is available in java.util package. put()方法在java.util包中可用。 put() method is used to set the given value element (val_ele) with the given key element (key_ele) when no valu…

全球六大国际域名解析量统计报告(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;都在等待…

Java Dictionary elements()方法与示例

字典类的elements()方法 (Dictionary Class elements() method) elements() method is available in java.util package. elements()方法在java.util包中可用。 elements() method is used to get the elements of an Enumeration in this dictionary. elements()方法用于获取此…

PHP与ThinkPHP读写文件

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

软件版本号设置规则及示例

一、版本号设置规则 ABC客户端 版本说明书 [版本命名规则] 如&#xff1a;1.0.0.0 位数名称描述情景第一位主版本重大修改&#xff0c;重写或里程碑[里程碑] [重大更新]第二位次版本显著增强、功能变更较多[新增功能] [删减功能]第三位生成号功能变更&#xff0c;局部修正较多…

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

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