0
点赞
收藏
分享

微信扫一扫

嵌套For循环性能优化


待优化实例:

for(int i = 0;i < 1000;i++){
for(int j = 0;j < 100;j++){
for(int k = 0; k < 10;k++){
System.out.print("hello world");
}
}
}

优化方案:

for(int i = 0;i < 10;i++){
for(int j = 0;j < 100;j++){
for(int k = 0; k < 1000;k++){
System.out.print("hello world");
}
}
}

优化方案分析

从待优化实例的代码来看,无论如何优化,System.out.print(“hello world”)执行的次数都是相同的,因此,该部分不存在优化的可能。所以,代码的优化只能从循环变量i、j、k的实例化、初始化、比较、自增等方面的耗时上进行优化。

首先,待优化实例里的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的变化如下:

变量

实例化(次数)

初始化(次数)

比较(次数)

自增(次数)

i

1

1

10

10

j

10

10

10*100

10*100

k

10*100

10*100

10*100*1000

10*100*1000

通过上述分析我们可以得知,待优化实例里的i、j、k产生的实例远多于优化后的实例,因此猜测优化是有效的,我们通过测试几组数据来对比一下:

优化前

测试代码:

public class Main {

public static void main(String[] args) {

long startA = System.nanoTime();
for(int i = 0;i < 1000;i++){
for(int j = 0;j < 100;j++){
for(int k = 0; k < 10;k++){
System.out.print("hello world");
}
}
}
System.out.println("A耗时#"+(System.nanoTime() - startA));

}
}

测试结果

次数

耗时

1

1425375971

2

1398468133

3

1375262410

4

1240545487

5

1203541739

优化后

测试代码:

public class Main {

public static void main(String[] args) {

long startA = System.nanoTime();
for(int i = 0;i < 10;i++){
for(int j = 0;j < 100;j++){
for(int k = 0; k < 1000;k++){
System.out.print("hello world");
}
}
}
System.out.println("A耗时#"+(System.nanoTime() - startA));

}
}

测试结果

次数

耗时

1

1408538940

2

1244797343

3

1337395806

4

1131249181

5

1237657526

对比两次测试结果,得出优化有效:

次数

优化前

优化后

1

1425375971

1408538940

2

1398468133

1244797343

3

1375262410

1337395806

4

1240545487

1131249181

5

1203541739

1237657526

综合上述,我们可以得知要优化嵌套for循环就是要减少临时变量的实例化次数和初始化次数

再优化

通过减少临时变量的实例化次数进行优化:

public class Main {

public static void main(String[] args) {

int i = 0;
int j = 0;
int k = 0;
long startA = System.nanoTime();
for(i = 0;i < 10;i++){
for(j = 0;j < 100;j++){
for(k = 0; k < 1000;k++){
System.out.print("hello world");
}
}
}
System.out.println("A耗时#"+(System.nanoTime() - startA));

}
}

再测试5组数据与之前的进行对比:

次数

优化前

优化后

再优化

1

1425375971

1408538940

1513062122

2

1398468133

1244797343

1197344393

3

1375262410

1337395806

1243512411

4

1240545487

1131249181

1198762975

5

1203541739

1237657526

1217136038

如果数据量跑够大,优化效果会越明显。

谢谢阅读。


举报

相关推荐

0 条评论