计算机类哪个专业最吃香,西安网站优化体验,网站注册信息查询,swf上传wordpress日常开发中#xff0c;经常会遇到一些循环耗时计算的操作#xff0c;一般也都会采用 for 循环来处理#xff0c;for 作为编程入门基础#xff0c;主要是处理重复的计算操作#xff0c;虽然简单好用#xff0c;但在写法上也有很多的考究#xff0c;如果处理不好#xff…日常开发中经常会遇到一些循环耗时计算的操作一般也都会采用 for 循环来处理for 作为编程入门基础主要是处理重复的计算操作虽然简单好用但在写法上也有很多的考究如果处理不好可能成为拖垮程序的罪魁祸首下面总结 10 多条 for 循环的常见优化方式让代码优雅起来。
首先我们初始化一个集合 list如下
ListString list new ArrayListString();
方式一最常规的不加思考的写法
for (int i 0; i list.size(); i) { System.out.println(list.get(i)); } 优点较常见易于理解 缺点每次都要计算list.size() 方式二数组长度提取出来
int m list.size(); for (int i 0; i m; i) { System.out.println(list.get(i)); } 优点不必每次都计算 缺点 m的作用域不够小违反了最小作用域原则 不能在for循环中操作list的大小比如除去或新加一个元素
方式三数组长度提取出来
for (int i 0, n list.size(); i n; i) { System.out.println(list.get(i)); } 优点不必每次都计算 变量的作用域遵循最小范围原则 缺点 m的作用域不够小违反了最小作用域原则 不能在for循环中操作list的大小比如除去或新加一个元素 方式四采用倒序的写法
for (int i list.size() - 1; i 0; i--) { System.out.println(list.get(i)); } 优点不必每次都计算 变量的作用域遵循最小范围原则 缺点 结果的顺序会反 看起来不习惯不易读懂 适用场合与显示结果顺序无关的地方比如保存之前数据的校验 方式五Iterator 遍历
for (IteratorString 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) { }
不过这种写法也不是绝对需要考虑循环过程中如果出现异常是否要中止流程如果不需要中止循环就需要将异常处理放在循环体内用来捕获单次循环出现的异常避免因为单词异常导致整个for循环后续中止
方式十倒序删除
如果不使用迭代器遍历删除时可以采用倒叙的方式遍历删除元素避免因为索引变化导致异常
for (int i list.size()-1; i 0; i--) { // 循环体 list.remove(i); }
优化后的代码
for (int i list.size()-1; i 0; i--) { // 循环体 list.remove(i); }
方式十一减少方法调用
在循环体内部尽可能减少方法的调用可以避免重复的方法调用开销。对于频繁调用的方法可以将结果缓存起来。
int size list.size(); for (int i 0; i size; i) { // 频繁调用的方法 // 这部分调用和当前的循环没有直接性关系就可以不放在循环体内 int result calculateResult(); // 循环体 }
优化后的代码
int size list.size(); int result calculateResult(); for (int i 0; i size; i) { // 使用缓存的结果 // 循环体 }
以上是一些常见的for循环很多都是一些不起眼的小细节改或不改都不会影响代码的正常执行但用户多了之后众多小问题累积起来可能就影响到整个系统的运行所以需要在日常开发中多注意这些小细节避免日后再来还技术债...