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

时间:2015-08-07 16:15:25

标签: java for-loop time

我试图获得将每个元素添加到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]);
    }

5 个答案:

答案 0 :(得分:3)

没有检查每个循环,因为这个时间很少,它将接近于零。其次,你并没有记住每个循环时间。因此,请检查循环前后的时间,而不是将循环数除以。

long startTime = System.nanoTime();

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

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

答案 1 :(得分:2)

不是测量单个添加,而是测量“循环前”和“循环后”之间的差异,然后除以循环大小以获得值:

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);

答案 2 :(得分:2)

如此简单,得到初始和结束时间,除了平均值之外每5000分红:

/*! navigate links */
var Dictionary = [["home","home.html"], ["about","about.html"]
];
$('nav ul li a').click(function(){
var id = this.id;
// find the button that clicked and navigate to the url
for (i=0; i<Dictionary.length; i++){
    if(id==Dictionary[i][0]){
        openNavPages(Dictionary[i][1]);
        }

    }
});
 // function to navigate pages
function openNavPages(url){
var page = url;

$('#main').animate({opacity: '0'},800,function(page){
    window.location.href = page;
    });
}

答案 3 :(得分:0)

我甚至没有考虑过将总时间缩短到循环之外。我能够做到这一点。感谢您的输入

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));

答案 4 :(得分:-1)

更改此行:

linked_add_total =+ linked_add_time;

linked_add_total += linked_add_time;