이상한 동작을 보이는 Java 큐가 있습니다. q.size()
을 호출하면 After 요소가 대기열에 푸시되고 항목의 첫 번째 절반 만 동일한 대기열에서 튀어 나옵니다. 그러나 q
의 항목을 내리기 전에 q.size()
에 의해 반환 된 값을 저장하면 모든 항목이 팝됩니다. 왜 그런가요? official documentation는 말한다 :이상한 큐 동작
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()
방법이 왜 일관되게 작동하지 않습니까? 내가 뭔가 잘못하고 있는거야? 그렇다면, 무엇?
http://en.wikipedia.org/wiki/Debugger – Isaac