我在 Java 中有一个队列,它表现出奇怪的行为。如果我调用q.size()
,在元素被推入队列之后,只有前半部分的项目会从同一个队列中弹出。但是,如果我q.size()
在弹出任何项目之前存储返回的值,则会弹出所有项目q
。这是为什么?官方文档说:
public int size()
返回此列表中的元素数。
这是我正在使用的代码。我使用了三种不同的编译器:JDK 6.0_31、JDK 7.0_7 和 Eclipse Compiler 0.A48。结果是一样的。
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()
方法不能始终如一地工作?难道我做错了什么?如果是这样,是什么?