【发布时间】:2014-10-23 00:36:07
【问题描述】:
例如在大数组中搜索最大值。单独方法中带有循环的代码比 main 中的相同内联代码运行得更快。在这里运行 10 次以获得平均消耗时间:
最大生成:999999 最大值为 999999 主要消耗时间:1.8210982999999998 ms 最大值为 999999 耗时方法:0.6809502000000001 ms有人能解释一下为什么会有这样的差异吗?谢谢。
import java.util.Random;
public class Main {
private static int[] data = new int[1000000];
private final static int COUNT = 10;
public static void main(String[] args) {
initData(data);
long consumedTime;
long startTime = System.nanoTime();
int max = 0;
for (int x = 0; x < COUNT; x++) {
max = data[0];
for (int i = 0; i < data.length; i++) {
if (data[i] > max) {
max = data[i];
}
}
}
consumedTime =(System.nanoTime() - startTime);
System.out.println("Max is "+max+ " Time consumed main: " + (double) (consumedTime)/1000000/COUNT + " ms");
startTime = System.nanoTime();
for (int x = 0; x < COUNT; x++) {
max = getMaxOnPart();
}
consumedTime=(System.nanoTime() - startTime);
System.out.println("Max is "+max+" Time consumed method: " + (double) (consumedTime)/1000000/COUNT + " ms");
}
private static void initData(int[] data) {
final Random random = new Random();
int max = 0;
for (int i = 0; i < data.length; i++) {
data[i] = random.nextInt(1000000);
if (max < data[i]) {
max = data[i];
}
}
System.out.println(" Max generated: " + max);
}
private static int getMaxOnPart() {
int max = data[0];
for (int i = 0; i < data.length; i++) {
if (data[i] > max) {
max = data[i];
}
}
return max;
}
}
【问题讨论】:
标签: java methods coding-style inline-code