使用几种不同的方法(二进制搜索,嵌套循环等),我正在测量两个数组之间寻找共同元素的平均运行时间.但是,当我增加循环的时间数时(我将运行时除以结尾的循环次数),每次迭代的平均运行时间减少.也就是说,它变得更快.
我在main方法中发现了导致这一行的行,所以我不会发布其余的main:
int intersection=studentList.intersectionSizeNestedLoops(firstList1,secondList1);
Run Code Online (Sandbox Code Playgroud)
我查看了每次迭代的运行时而不是最后的平均值,我完全注意到了原因.出于某种原因,前几次迭代总是需要更长的时间(取决于列表大小,但是前几个时间为500 000 ns,之后的所有内容为20 000 ns,因此当您有更多迭代时,它会平均到较低的运行时间因此更多的20 000 ns迭代).
但是它没有任何算法,所以它必须是studentlist方法.
生成列表:
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;
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
这是完全正常的.程序变得更快,因为即时编译器启动并编译部分代码.
您可以通过启动JVM来验证这一点-XX:+PrintCompilation.
定时Java代码可能很棘手.请参阅如何在Java中编写正确的微基准测试?进行了很好的讨论.