メソッドが完了するまでにかかる時間を記録しようとしています。私はもともとメソッド全体のタイミングを計っていましたが、数値が少しずれているように見えたので、個々のパスがforループを通過するタイミングを決めることにしました。
奇妙なことに、ループが進行するにつれて、エンキュー操作は毎回速くなるように見えます。q.enqueue()を呼び出すたびに、インクリメントされた文字列( "String1"、 "String2"、....など)がリンクリストキューにエンキューされます。
num = 100にすると、各パスに約4,000ナノ秒かかります。ただし、numを100,000に増やすと、最初の数百回のパスで再び約4,000回かかることがわかりますが、徐々に速くなり、最後の100回程度は316ナノ秒または0ナノ秒になります。
nanotimeの使用が100%正確になるわけではないことは知っていますが、ループが進むにつれて明らかに速くなります。
ここで何が起こっているのですか?
public static void enqueueLoop(int num, Queue q){
for (int i=0;i<num;i++){
long start, enqueueTime;
start = System.nanoTime();
q.enqueue("String" + (i+1));
qTime = System.nanoTime() - start;
System.out.println("Enqueue Operation took: " + NumberFormat.getInstance().format(qTime) + " nanoseconds");
}
}