当前位置: 代码迷 >> java >> 在Java中平均For循环迭代的时间
  详细解决方案

在Java中平均For循环迭代的时间

热度:34   发布时间:2023-07-25 19:52:00.0

我试图获得将每个元素添加到5000个元素的数组中所需的平均时间。 我可以获取循环中每个加法运算的时间,但是在获取运行总计时遇到了麻烦,因此我无法计算循环外的平均值。

到目前为止,我有以下代码在其中打印总计

for (int i = 0; i < testData.length; i++) {
        testData[i] = UUID.randomUUID().toString();
    }

    /****************************
     * Linked List Set Unit Test
     ****************************/

    long linked_add_time = 0;
    long linked_add_total = 0;

    for (int i = 0; i < 5000; i++){ // first 5000 elements used to measure average add time
        linked_add_time = System.nanoTime();
        linked.add(testData[i]);
        linked_add_time = System.nanoTime() - linked_add_time;
        linked_add_total =+ linked_add_time;
    }
    System.out.println(linked_add_total);

    for (int i = 5000; i < testData.length; i++){
        linked.add(testData[i]);
    }

检查每个循环没有意义,因为这个时间太短了,它将接近于零。 其次,您无论如何都不会记住每个循环时间。 因此,请检查循环前后的时间,而不是除以循环数。

long startTime = System.nanoTime();

for (int i = 0; i < 5000; i++){
    linked.add(testData[i]);
}
System.out.println("Average time: " +(startTime + System.nanoTime())/5000 );

如果您使用的是 ,那么无论集合多大,添加时间都应该相同。 如果您使用而不是每个下一个添加操作,则可能会更慢( ArrayList应该重建内部数组,每添加n新元素)。

而不是测量单个加法,而是测量与“循环之前”和“循环之后”的差,然后除以循环大小即可得到该值:

final int count = 5000;
final long startTime = System.nanoTime();
for (int i = 0; i < count; ++i) {
    linked.add(testData[i]);
}
final long endTime = System.nanoTime();
final long totalTime = endTime-startTime;
System.out.printf("Total Time = %dns.  Avg Time: %dns\n", totalTime, totalTime/count);

如此简单,获取初始时间和结束时间,然后除以平均数即可得到的每5000分之一:

long startTime = System.nanoTime();
for (int i = 0; i < 5000; i++){ 
    linked.add(testData[i]);
}
long endTime = System.nanoTime();
System.out.println("Average time: " +(endTime - startTime)/5000 );

我什至没有想到只让总时间超出循环范围。 我能够做到这一点。 感谢您的输入

long startTime = System.nanoTime();
    for (int i = 0; i < 5000; i++){ // first 5000 elements used to measure average add time
        linked.add(testData[i]);
    }
    System.out.println("Average time for adding to LinkedList: " +((System.nanoTime() - startTime)/5000));

更改此行:

linked_add_total =+ linked_add_time;

linked_add_total += linked_add_time;
  相关解决方案