2

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

我在我的 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;
}

谢谢你。

4

1 回答 1

8

这是完全正常的。程序变得更快,因为即时编译器启动并编译部分代码。

您可以通过使用 启动 JVM 来验证这一点-XX:+PrintCompilation

为 Java 代码计时可能很棘手。请参阅如何在 Java 中编写正确的微基准测试?进行良好的讨论。

于 2013-01-25T22:59:34.303 回答