奇妙な動作を示す Java のキューがあります。を呼び出すとq.size()
、要素がキューにプッシュされた後、アイテムの前半のみが同じキューからポップアウトされます。q.size()
ただし、からアイテムをポップする前に、によって返された値を保存すると、すべてのアイテムがポップされq
ます。何故ですか?公式ドキュメントには次のように書かれています。
public int size()
このリスト内の要素の数を返します。
これが私が使用しているコードです。JDK 6.0_31、JDK 7.0_7、および Eclipse Compiler 0.A48 の 3 つの異なるコンパイラを使用しました。結果は同じです。
import java.util.*;
public class StrangeQueueTest{
public static void main(String[] args){
Queue<String> q = new LinkedList<String>();
String[] testData = {"1: one", "2: two", "3: three", "4: four", "5: five",
"6: six", "7: seven", "8: eight", "9: nine", "10: ten", "11: eleven",
"12: twelve", "13: thirteen", "14: fourteen", "15: fifteen",
"16: sixteen", "17: seventeen", "18: eighteen", "19: nineteen",
"20: twenty"};
//Push items into the queue
for(int x = 0; x < testData.length; x++)
q.add(testData[x]);
//Pop items out of the queue, calling size() at every iteration
for(int x = 0; x < q.size(); x++)
System.out.println(q.poll());
//Pop items out of the queue, calling size() once
/*int count = q.size();
for(int x = 0; x < count; x++)
System.out.println(q.poll());*/
}
}
size()
メソッドが一貫して機能しないのはなぜですか? 私は何か間違ったことをしていますか?もしそうなら、何?