<span style="font-size:24px;">1、循环执行次数相同,大循环放在外面还是小循环放在外层效率高呢?</span>
int end1 = 10; int end2 = 100; int end3 = 1000000; long startTime = System.nanoTime();//开始时间 for(int i=1;i<=end3;i++) { for(int j=1;j<=end2;j++) { for(int k=1;k<=end1;k++) {//System.out.println("1"); count++; } } } long endTime = System.nanoTime();//运行结束时间
int end1 = 10; int end2 = 100; int end3 = 1000000; long startTime = System.nanoTime();//开始时间 for(int i=1;i<=end1;i++) { for(int j=1;j<=end2;j++) { for(int k=1;k<=end3;k++) {//System.out.println("1"); count++; } } } long endTime = System.nanoTime();//运行结束时间
我测试这两个代码时,是第一个程序运行时间稍微短。。。1000000000 4526307945ns。第二个是:1000000000 5150243082ns。不是应该把循环次数多的放在内层,减少cpu循环内外层的切换时间,然后会更快么。
2、计算放在循环内的重复使用
int count=0; long startTime = System.nanoTime();//开始时间 //int end = getEndTime(); for(int i=1;i<=getEndTime();i++) { count++; } long endTime = System.nanoTime();//运行结束时间 System.out.println(count); System.out.println(endTime-startTime+"ns");
1000
25881ns
int count=0; long startTime = System.nanoTime();//开始时间 int end = getEndTime(); for(int i=1;i<=end;i++) { count++; } long endTime = System.nanoTime();//运行结束时间 System.out.println(count); System.out.println(endTime-startTime+"ns");运行结果:
8925ns
第一段代码重复进行多余的计算。
3、局部变量与成员变量的访问
局部变量是在栈上分配的,而类的实例变量在堆中分配的,对局部变量的访问速度快于对实例变量的访问速度。所以当循环多次访问某实例变量时,可先将实例变量赋值给局部变量。然后对局部变量访问。
public class Main { private int end = 1000; public void fun1() { for(int i=0;i<end;i++) { dosomething(); } } public void fun2() { int temp = end; for(int i=0;i<temp;i++) { dosomething(); } }