>Java >java지도 시간 >Java PriorityQueue Iterator가 순서대로 순회를 보장하지 않는 이유는 무엇입니까?

Java PriorityQueue Iterator가 순서대로 순회를 보장하지 않는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-09 15:43:10923검색

Why Doesn't the Java PriorityQueue Iterator Guarantee Ordered Traversal?

PriorityQueue 순회 순서 호기심

Java PriorityQueue 클래스는 놀랍게도 특정 순회를 보장하지 않는 내장 반복자를 제공합니다. 주문하다. 표준에서 벗어나면 다음과 같은 질문이 제기됩니다. PriorityQueue 반복자는 왜 이런 식으로 동작합니까?

Java 문서를 자세히 살펴보면 다음 구절을 접하게 됩니다.

"이 클래스와 해당 반복자는 모든 것을 구현합니다. Collection 및 Iterator 인터페이스의 선택적 메소드 중 iterator() 메소드에 제공된 Iterator는 특정 순서로 우선순위 큐의 요소를 순회하는 것을 보장하지 않습니다. 순회하려면 Arrays.sort(pq.toArray()) 사용을 고려하십시오."

근본적인 이유는 PriorityQueue에서 사용하는 데이터 구조에 있습니다. 배열이나 연결된 목록과 같은 데이터 구조와 달리 PriorityQueue는 가장 작거나 가장 큰 요소 검색에 우선 순위를 두는 이진 힙을 활용합니다. 그러나 이러한 우선순위에는 비용이 따릅니다. 힙의 특성으로 인해 해당 요소의 순서화된 순회를 제공하는 효율적인 알고리즘이 없습니다.

바이너리 힙에서 가장 작은 요소는 루트에 있으며, 제거되면 힙은 다음과 같습니다. 다음으로 가장 작은 요소를 루트로 올리기 위해 재조정됩니다. 이러한 상수 재정렬은 정렬된 순회를 비현실적으로 만듭니다.

따라서 PriorityQueue 반복자는 요소가 반환되는 순서에 대한 보장을 제공하지 않고 데이터 구조를 순회하도록 설계되었습니다. 순서대로 순회하려면 PriorityQueue의 배열 표현에 Arrays.sort()와 같은 외부 메서드를 사용해야 합니다.

위 내용은 Java PriorityQueue Iterator가 순서대로 순회를 보장하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.