使用几种不同的方法(二进制搜索,嵌套循环等),我正在测量两个数组之间寻找共同元素的平均运行时间。但是,当我增加循环的时间数时(我将运行时除以结尾的循环次数),每次迭代的平均运行时间减少。也就是说,它变得更快。
我在main方法中发现了导致这一行的行,所以我不会发布其余的main:
int intersection=studentList.intersectionSizeNestedLoops(firstList1,secondList1);
我查看了每次迭代的运行时而不是最后的平均值,我完全注意到了原因。出于某种原因,前几次迭代总是需要更长的时间(取决于列表大小,但是前几个时间为500 000 ns,之后的所有内容为20 000 ns,因此当您有更多迭代时,它会平均到较低的运行时间因此更多的20 000 ns迭代)。
虽然它不是任何算法,但它必须是学生列表方法。
生成列表:
public studentList(int size, String course) {
int IDrange = 2*size;
studentID = new int[size];
boolean[] usedID = new boolean[IDrange];
for (int i = 0; i < IDrange; i++)
usedID[i] = false;
for (int i=0;i<size;i++) {
int t;
do {
t = (int) (Math.random()*IDrange);
} while (usedID[t]);
usedID[t] = true;
studentID[i] = t;
}
courseName = course;
numberOfStudents = size;
}
谢谢。
答案 0 :(得分:8)
这是完全正常的。程序变得更快,因为just-in-time compiler启动并编译部分代码。
您可以通过使用-XX:+PrintCompilation
启动JVM来验证这一点。
定时Java代码可能很棘手。有关详细讨论,请参阅How do I write a correct micro-benchmark in Java?。