循环的一些细节

<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();
		}
	}
	


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值