优化for循环
写代码不仅是一种技术活!更可以体现艺术范!!!
==================================================================
1.for()循环在众多编程语言中都有着不可替代的地位,并且在各种语言中的语法规范一致:
for(option1; option2; option3) {
//code body
}
2.那么如何使得自己的编写的for()循环更具有效率呢?????
2.1.例子(以Java语言为例):使用for()循环遍历数组,且将数组中的元素打印到控制台
2.2.一般的(也是大众的)做法如下:
public class Test { public static void main(String[] args) { int[] arrs = {2,1,3,4,5,6,9}; for(int i=0; i<arrs.length; i++) { System.out.println(arrs[i]); } } }
3.for()循环分析:效率问题出现在循环语句的第二个条件上------->i<arrs.length;当循环每执行一次时"i<arrs.length"条件其实执行了两部分,第一部分是计算arrs.length,第二部分才是循环所真正需要的比较语句即:i < arrs.length;所以每次顺带执行arrs.length是一个多余的步骤,试想当一个数组或者容器很大时,反复计算它的大小是一项艰巨的任务,且降低了程序的效率;其实数组或者容器的大小只需计算一次即可。
4.小结:我们在写for()时,无意间就写出了冗余的,效率低下的程序!!!
5.解决之道:让计算容器的大小操作只出现一次!
6.情况一:好的!那么你此时茅塞顿开,你也许会这样想:
public class Test { public static void main(String args) { int[] arrs = {1,2,3,4,5,6}; int arrsLength = arrs.length; for(int i=0; i<arrsLength; i++) { Systm.out.println(arrs[i]); } } }
6.1.在方法内定义一个变量来获取arrs.length,这样看似没问题,但是当这个方法内只有循环语句内要使用到arrs.length时,定义一个变量arrsLength来获取arrs.length又不合理(规则:尽量不要定义全局的变量)
7.情况二:貌似还有一种更好的解决方案
public class Test { public static void main() { int[] arrs = {1,2,3,4,5}; for(int i=0, arrsLength=arrs.length; i<arrsLength; i++) { System.out.println(arrs[i]); } } }
7.1这样做的好处在于:1.避免了过多定义全局变量2.只在初识化时计算了一次容器大小,提高了效率
总结:代码是值得品味的!做一个优雅的码农!!!