请教一下for语句的优化: for(int i=0;i<1000;i++){
for(int j=0;j<100;j++){
for(int k=0;k<10;k++){
function(i,j,k);
}
}
}谢谢
for(int j=0;j<100;j++){
for(int k=0;k<10;k++){
function(i,j,k);
}
}
}谢谢
解决方案 »
- 请问这样的return用法对嘛
- 关于线程同步的问题
- 一个java程序简单的不能再简单的东西了。还是出错。请指教。
- 看到那个4棵树的问题,我也来一个
- 求教高手:如何在Java语言中使用Microsoft Agent技术?
- 弱弱的问一个问题:怎样使对话框右上角的关闭按钮无效。(即屏蔽该按钮)……………………谢谢了!
- Linux下mysql驱动问题,大家请进
- 在用内隐类来实现某个监听器时,是否有必要把内隐类声明为private
- Design patterns, elements of reusable software
- 工作之余写的一个java版的小程序,可以聊聊天,发发帖子,请大家给些意见。
- 大虾看贴!!!
- 请教一个问题 有关I/O
xxx function(){
for(int i=0;i <1000;i++){
for(int j=0;j <100;j++){
for(int k=0;k <10;k++){
// function的函数体放在这儿
}
}
}
}
function方法都没定义,不知道具体要做些什么
这个帖子有答案~~
for(int j=0;j <100;j++){
for(int i=0;i <1000;i++){
function(i,j,k);
}
}
}
循环次数最少的应该在最外层
public class TestFor { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub Long t1=System.currentTimeMillis();
for(int k=0;k <10;k++){
for(int j=0;j <100;j++){
for(int i=0;i <10000;i++){
;
}
}
}
Long t2=System.currentTimeMillis();
System.out.println(t2-t1);
}}别感觉阿,把10和10000换一下,在我这两次时间相差4
for循环的实质就是比较,举个极端的例子,外层循环是1,内层是10000
首先,外层比较1次,然后进入内层,比较10001次(结束时还有1次),然后外层再1次,结束,一共是10003次比较
如果外层是10000次,内层是1次
首先,外层比较1次,然后进入内层,比较2次(结束时还有1次),然后循环10000次,外加1次结束,一共是30001次比较如果循环有几层的话,效率还是比较可观的。当在性能关键函数时,尤其需要考虑。
现在的CPU都是流水线式工作的,并具备智能预读代码的功能,因此顺序执行的代码效率是最高并没有时间损耗的。
效率最差的是判断,因为CPU无法预知代码将转向哪个分支,如果是继续执行接下来的代码还好,但是一旦是转向若干字节后的代码就需要先清空代码缓存,然后再将新代码读入继续执行。
其次是多次的循环,因为循环中包含判断,但循环次数多了CPU会提前将循环体代码读入代码缓存,之后的效率就高了,直到循环结束。
因此对于嵌套循环的优化建议将次数少的循环放在外层。