编程珠玑第二版第六章习题(Java)

这一章的程序性能分析通常在数据结构第一张就会讲到。

3 写个程序测试一下

public class TimeTest {
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		long time1, time2, time3, time4;
		float a = 0;
		double b = 0;
		float x = 1;
		double y = 1;
		for (int j = 1; j < 1000000000; j = j * 10) {
			a = 0;
			b = 0;
			x = 0;
			y = 0;
			time1 = System.currentTimeMillis();
			for (int i = 1; i < j; i++)
				a = a + x;
			time2 = System.currentTimeMillis();

			time3 = System.currentTimeMillis();
			for (int i = 1; i < j; i++)
				b = b + y;
			time4 = System.currentTimeMillis();

			System.out.println("float 执行" + String.valueOf(j) + "次加法得时间是 "
					+ String.valueOf(time2 - time1) + "毫秒");
			System.out.println("double 执行" + String.valueOf(j) + "次加法得时间是 "
					+ String.valueOf(time4 - time3) + "毫秒");
			System.out.println("-----------------------");
		}

	}
}

运行结果:

float 执行1次加法得时间是 0毫秒
double 执行1次加法得时间是 0毫秒
———————–
float 执行10次加法得时间是 0毫秒
double 执行10次加法得时间是 0毫秒
———————–
float 执行100次加法得时间是 0毫秒
double 执行100次加法得时间是 0毫秒
———————–
float 执行1000次加法得时间是 0毫秒
double 执行1000次加法得时间是 0毫秒
———————–
float 执行10000次加法得时间是 0毫秒
double 执行10000次加法得时间是 0毫秒
———————–
float 执行100000次加法得时间是 1毫秒
double 执行100000次加法得时间是 1毫秒
———————–
float 执行1000000次加法得时间是 1毫秒
double 执行1000000次加法得时间是 1毫秒
———————–
float 执行10000000次加法得时间是 12毫秒
double 执行10000000次加法得时间是 10毫秒
———————–
float 执行100000000次加法得时间是 107毫秒
double 执行100000000次加法得时间是 140毫秒

强弱悬殊,高下立判。

然而每次运行结果不完全相同,不知为何。

后边的题目书上解释很详细了,不再赘述。

点赞