2016-12-22 7 views
-1

Comparator없이 PriorityQueue을 사용하면 각 제안 후에 큐가 다시 정렬되고, 그렇다면 어떻게 피할 수 있습니까? Javadoc의에서** PriorityQueue **에 아무것도 추가 할 때마다 자체 재정렬이 수행됩니까?

+0

왜 우선 순위 큐가 자체적으로 재배치되는 것을 피하기를 원합니까? 우선 순위 대기열에 대한 전체 아이디어는 최상위 우선 순위 항목이 루트에 있도록 항목을 정렬 된 상태로 유지하는 것입니다. 데이터 구조가 우선 순위 대기열처럼 작동하지 않도록하려면 우선 순위 대기열을 사용하지 않아야합니다. –

답변

1

: 우선 순위 heap에 근거

하는, 무제한의 우선 도큐입니다. 우선 순위 큐의 요소는 자연 순서에 따라 정렬되거나 사용되는 생성자에 따라 대기열 작성시 제공된 비교 자에 따라 정렬됩니다.

예 주문을 유지하기 위해 요소가 추가되면 대기열이 다시 정렬됩니다. 당신은 그것을 피할 수 없습니다. Comparator을 제공하지 않으면 자연 순서 (요소 유형의 Compabable 구현으로 정의 됨)가 사용됩니다. 그것이 귀하의 목적에 맞지 않으면 PriorityQueue을 사용하지 마십시오.

+0

이것은 정확하지 않습니다. 요소는 힙 속성을 유지하는 데 필요한 경우에만 재 배열되지만 많은 경우 값을 추가하면 새 잎이 만들어집니다. 우선 순위 큐와 정렬 된 구조 (배열, 이진 트리 등)의 차이점과 왜 우선 순위 큐와 후자보다 성능이 좋은지의 차이입니다. –