demo如下:
public class TestM { public static void main(String[] args) { for (int i = 0; i <15 ; i++) { aaa();//630 //bbb();//600 } } private static void aaa() { long s = System.currentTimeMillis(); int a = 0, b = 1; for (int i = 0 ; i < 10000; i++) { for (int j = 0 ; j < 1000; j++) { for (int k = 0 ; k < 100; k++) { a += b; if (a == 10000 * 1000 * 100){ System.out.println("最后一个"); } } } } System.out.println(System.currentTimeMillis()-s); } private static void bbb() { long s = System.currentTimeMillis(); int a = 0, b = 1; for (int i = 0 ; i < 100; i++) { for (int j = 0 ; j < 1000; j++) { for (int k = 0 ; k < 10000; k++) { a += b; if (a == 10000 * 1000 * 100){ System.out.println("最后一个"); } } } } System.out.println(System.currentTimeMillis()-s); } }
结论:外层循环小的效率更高。
为什么?
在aaa的情况下
变量/次数 | 初始化次数 | 自增次数 | 比较次数 |
i | 10000 | 10000 | 10000 |
j | 10000 * 1000 | 10000 * 1000 | 10000 * 1000 |
k | 10000 * 1000 * 100 | 10000 * 1000 * 100 | 10000 * 1000 * 100 |
在bbb的情况下
变量/次数 | 初始化次数 | 自增次数 | 比较次数 |
i | 100 | 100 | 100 |
j | 100* 1000 | 100 * 1000 | 100* 1000 |
k | 10000 * 1000 * 100 | 10000 * 1000 * 100 | 10000 * 1000 * 100 |
所以,多重for循环,小的放外部