[英]Averaging the time of a For loop iteration in Java
我試圖獲得將每個元素添加到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 );
如果您使用的是LinkedList ,那么無論集合多大,添加時間都應該相同。 如果您使用ArrayList而不是每個下一個添加操作,則可能會更慢( 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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.