2010-12-20 4 views
4

Java.util의 PriorityQueue 클래스를 사용한다고 가정합니다. PriorityQueue pq에서 가장 큰 숫자를 제거하려고합니다. 큐의 선두에 있다고 가정합니다.PriorityQueue의 맨 위 제거 중?

다음과 같이 작동합니까?

// 1 
int head = pq.peek(); 
pq.dequeue(head); 

// 2 
int head = pq.dequeue(pq.peek()); 

비 기본형에서도 동일하게 작동합니까?

+2

케어 수익을 제거? – falstro

+1

'dequeue'메소드는 어디에서 찾았습니까? [내 API가 표시되지 않습니다.] (http://download.oracle.com/javase/6/docs/api/java/util/PriorityQueue.html) ..? –

답변

6

Queue#peekQueue#element 리턴 큐의 선두 값 Queue#pollQueue#remove을 제거.

int head = pq.poll(); 

당신이 원하는 것을처럼

는 것 같습니다.

그리고 은 프리미티브가 아닌 값에 대해서만 작동합니다. 대기열은 개체 만 저장하기 때문입니다. 트릭은 큐가 Integer 값을 저장하고 Java 1.5+가 결과를 int 프리미티브 (outboxing)로 자동 변환 할 수 있다는 것입니다. 따라서 과 같은 큐를 int 값으로 저장합니다.

+0

감사합니다.하지만 downvoting하지만 .. 왜 * *? –

3

peek() - 반환하지만 머리 값

poll()을 제거하지 않습니다 - 당신은`여론 조사()`를 사용하지 않는 이유를 계몽 머리 값을

 PriorityQueue<Integer> pq = new PriorityQueue<Integer>(); 

     pq.add(2);pq.add(3); 

     System.out.println(pq); // [2, 3] 
     System.out.println(pq.peek()); // head 2 
     System.out.println(pq); // 2 still exists. [2, 3] 
     System.out.println(pq.poll()); // 2. remove head (2) 
     System.out.println(pq); // [3] 
관련 문제