Java 中 For 循环迭代的平均时间
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, then add time should be the same, no matter how big your collection will be. If you would use ArrayList 而不是每个下一个添加操作可能会更慢(ArrayList
应该重建内部数组,每添加 n
个新元素)。
不测量单个添加,而是测量 "before the loop" 和 "after the loop" 的差异,然后除以循环大小以获得值:
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);
更改此行:
linked_add_total =+ linked_add_time;
到
linked_add_total += linked_add_time;
如此简单,获取初始和结束时间,然后每 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));
我正在尝试获取将每个元素添加到包含 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, then add time should be the same, no matter how big your collection will be. If you would use ArrayList 而不是每个下一个添加操作可能会更慢(ArrayList
应该重建内部数组,每添加 n
个新元素)。
不测量单个添加,而是测量 "before the loop" 和 "after the loop" 的差异,然后除以循环大小以获得值:
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);
更改此行:
linked_add_total =+ linked_add_time;
到
linked_add_total += linked_add_time;
如此简单,获取初始和结束时间,然后每 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));