3、从案例分析,对于原题代码,我们提出有两种优化方案:3.1优化方案一1.for (int i = 0; i < 10; i++) 2. for (int j = 0; j < 100; j++) 3. for (int k = 0; k < 1000; k++) 4. testFunction (k, j, i); 该方案主要是将循环次数最少的放到外面,循环次数最多的放里面,这样可以最大程度的(注:3个不同次数的循环变量共有6种排列组合情况,此种组合为最优)减少相关循环变量的实例化次数、初始化次数、比较次数、自增次数,方案耗
4、时情况如下:3.2优化方案二1.int i, j, k; 2.for (i = 0; i < 10; i++) 3. for (j = 0; j < 100; j++) 4. for (k = 0; k < 1000; k++) 5. testFunction (k, j, i); 该方案在方案一的基础上,将循环变量的实例化放到循环外,这样可以进一步减少相关循环变量的实例化次数,方案耗时情况如下:4解决结果那么,提出的优化方案是否如我们分析的那样有了性能上的提升了呢?我们编写一些测试代码进行验证,数据更能说明我们的优化效果
5、。4.1测试代码1.public static void testFunction(int i, int j, int k) { 2. System.out.print(""); // 注:该方法不影响整体优化,这里只有简单输出 3. } 4. 5. public static void testA() { 6. long start = System.nanoTime(); 7. for (int i = 0; i < 1000; i++) 8. for (int j = 0; j
6、< 100; j++) 9. for (int k = 0; k < 10; k++) 10. testFunction(i, j, k); 11. System.out.println("testA time>>" + (System.nanoTime() - start)); 12. } 13. 14. public static void testB() { 15. long start = System.nanoTime(); 16.
7、for (int i = 0; i < 10; i++) 17. for (int j = 0; j < 100; j++) 18. for (int k = 0; k < 1000; k++) 19. testFunction(k, j, i); 20. System.out.println("testB time>>" + (System.nanoTime() - start)); 21. } 22. 23. public static void