使用几种不同的方法(二进制搜索、嵌套循环等),我测量了在两个数组之间查找公共元素的平均运行时间。但是,当我增加它循环的时间时(我将运行时间除以最后的循环数),每次迭代的平均运行时间会减少。也就是说,它变得更快。
我在我的 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;
}
谢谢你。