<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");
运行结果:
1000
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();
}
}