1 案例描述
某日,在JavaEye上看到一道面试题,题目是这样的:请对以下的代码进行优化
for (int i = 0; i < 1000; i++)for (int j = 0; j < 100; j++)for (int k = 0; k < 10; k++)
testFunction (i, j, k);
2 案例分析
从给出的代码可知,不论如何优化,testFunction执行的次数都是相同的,该部分不存在优化的可能。那么,代码的优化只能从循环变量i、j、k的实例化、初始化、比较、自增等方面的耗时上进行分析。
首先,我们先分析原题代码循环变量在实例化、初始化、比较、自增等方面的耗时情况:
变量
实例化(次数)
初始化(次数)
比较(次数)
自增(次数)
i
1
1
1000
1000
j
1000
1000
1000 * 100
1000 * 100
k
1000 * 100
1000 * 100
1000 * 100 * 10
1000 * 100 * 10
该代码的性能优化就是尽可能减少循环变量i、j、k的实例化、初始化、比较、自增的次数,同时,不能引进其它可能的运算耗时。
3 解决过程
从案例分析,对于原题代码,我们提出有两种优化方案:
方案一: