锁定老帖子 主题:循环的优化
精华帖 (2) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-10-28
lyy5271 写道 我觉得这些东西可以扩展知识面,但用处不大。
举个例子,访问二维数组的时候按行优先比按列优先效率要高,原因是所谓的局部性原理,可以充分利用计算机的高速缓存,可是这些东西对做java的企业应用有什么用处呢?反正我觉得没有什么用处。 当数据量大到一定程度时你就知道有不有用了。 |
|
返回顶楼 | |
发表时间:2008-10-28
引用 2,尽量把异常捕获写在外面 //foo for(int i=180000;i>=0;i--){ try{ //慢 }catch{ } } //优化 try{ for(int i=180000;i>=0;i--){ //快 } }catch{ } 这两个表示的意义都不一样 |
|
返回顶楼 | |
发表时间:2008-10-28
第一例子我觉得到差别不大,其他的是应该这样写,还有个那个异常处理也有问题,因为产生的结果不一样,那得根据业务需要了!平时编码时还是时要注意优化和美观!
|
|
返回顶楼 | |
发表时间:2008-10-28
恩,楼主总结的非常好。
我们的编码规范也是这么要求的 |
|
返回顶楼 | |
发表时间:2008-10-29
/*循环的优化
for(int i=20;i>0;i--){
|
|
返回顶楼 | |
发表时间:2008-10-29
挺是不错的
|
|
返回顶楼 | |
发表时间:2008-10-29
是不是我写的测试有问题呀。
|
|
返回顶楼 | |
发表时间:2008-10-29
在for循环理更令人震惊,结果和楼主刚好相反:
import java.util.concurrent.TimeUnit; /* 循环的优化 --------------------------------------- 1,数字比较尽量和0比较 注释:计算机喜欢0和1 //foo for(int i=0;i<Integer.MAX_VALUE;i++){ //慢 } //优化 for(int i=Integer.MAX_VALUE;i>=0;i--){ //快 } 测试结论:看不太出来 */ public class TestFor { public TestFor(){ System.out.println("开始测试for循环"); } //test from 0; public void doForBegin0(){ for(long i=0;i<Integer.MAX_VALUE;i++){ ; } } //test from max public void doForBeginMax(){ for(long i=Integer.MAX_VALUE;i>0;i--){ ; } } public static void main(String args[]){ for(int i=20;i>0;i--){ TestFor test = new TestFor(); long beginTime = System.currentTimeMillis(); test.doForBegin0(); long endTime = System.currentTimeMillis(); System.out.println(endTime-beginTime); //System.runFinalization(); System.gc(); try { TimeUnit.MILLISECONDS.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } beginTime = System.currentTimeMillis(); test.doForBeginMax(); endTime = System.currentTimeMillis(); System.out.println(endTime-beginTime); } } } 结果:每个都比第一种慢。。。。。》》》》》》》》 开始测试for循环 12531 13735 开始测试for循环 11297 11500 开始测试for循环 11235 11484 开始测试for循环 11250 11516 开始测试for循环 11281 11578 开始测试for循环 11250 11469 开始测试for循环 11203 11500 开始测试for循环 11250 11516 开始测试for循环 11296 11453 开始测试for循环 11235 11484 开始测试for循环 11250 11516 开始测试for循环 11281 11516 开始测试for循环 11281 11516 开始测试for循环 11375 11500 开始测试for循环 11297 11563 开始测试for循环 11312 11578 开始测试for循环 11282 11625 开始测试for循环 11266 11469 开始测试for循环 11640 11813 开始测试for循环 11234 11547 。。。。。 |
|
返回顶楼 | |
发表时间:2008-10-29
4, 在循环中最好不要拼接字符串一
注释:String是不变类,对其更改都会重新创建字符串,从而导致内存和速 度的问题, 另外StringBuilder是sun为解决字符串操作效率低下而创建 地(StringBuffer早), 有字符buffer,解决字符的增删改都是相当快滴 //foo String str = ""; for (int i = 0; i >= 18000; i--) { // 慢 占用内存大 str += "慢 占用内存大"; } //优化 StringBuilder yourString = new StringBuilder(); for (int i = 0; i >= 18000; i--) { // 快 占用内存小 yourString.append("快 占用内存小"); } for (int i = 0; i >= 18000; i--) 改为 for (int i = 18000; i >= 0; i--) |
|
返回顶楼 | |
发表时间:2008-10-29
这些细节以前还真没注意过呢
|
|
返回顶楼 | |