嵌套循环
- 外大内小
private static void inBigOutSmall(){
long startTime = System.currentTimeMillis();
int a = 0;
for (int i = 0; i < 1000000000; i++) {
for (int j = 0; j < 10; j++) {
a += j;
}
}
long endTime = System.currentTimeMillis();
System.out.println("外大内小耗时:"+ (endTime - startTime) + " : 结果:"+a);
}
- 外小内大
private static void outBigInSmall(){
long startTime = System.currentTimeMillis();
int a = 0;
for (int j = 0; j < 10; j++) {
for (int i = 0; i < 1000000000; i++) {
a += j;
}
}
long endTime = System.currentTimeMillis();
System.out.println("外小内大耗时:"+ (endTime - startTime) + " : 结果:"+a);
}
输出结果
外大内小耗时:3071 : 结果:2050327040
外小内大耗时:196 : 结果:2050327040
由结果得出,嵌套循环应遵循 “外小内大” 的原则
循环计算
- 原数据类型
private static void outBigInSmall(){
long startTime = System.currentTimeMillis();
int a = 0;
for (int j = 0; j < 10; j++) {
for (int i = 0; i < 10000000; i++) {
a += j;
}
}
long endTime = System.currentTimeMillis();
System.out.println("外小内大耗时:"+ (endTime - startTime) + " : 结果:"+a);
}
- 包装数据类型
private static void outBigInSmall(){
long startTime = System.currentTimeMillis();
Integer a = 0;
for (int j = 0; j < 10; j++) {
for (int i = 0; i < 10000000; i++) {
a += j;
}
}
long endTime = System.currentTimeMillis();
System.out.println("外小内大耗时:"+ (endTime - startTime) + " : 结果:"+a);
}
输出结果
原数据类型耗时:6 : 结果:450000000
包装数据类型耗时:615 : 结果:450000000
由结果得出,循环计算应该尽量避免使用 “包装数据类型”
更多优化细节参考 不受天磨非好汉,不遭人妒是庸才——刘水镜