The built-in iterator for java's PriorityQueue does not traverse the data structure in any particular order. Why?

后端 未结 5 970
说谎
说谎 2020-11-22 08:43

This is straight from the Java Docs:

This class and its iterator implement all of the optional methods of the Collection and Iterator interfaces.

相关标签:
5条回答
  • 2020-11-22 09:16

    PriorityQueues are implemented using binary heap. A heap is not a sorted structure and it is partially ordered. Each element has a “priority” associated with it. Using a heap to implement a priority queue, it will always have the element of highest priority in the root node of the heap. so in a priority queue, an element with high priority is served before an element with low priority. If two elements have the same priority, they are served according to their order in the queue. Heap is updated after each removal of elements to maintain the heap property

    0 讨论(0)
  • 2020-11-22 09:16

    At first guess, it's probably traversing the data in the order in which it's stored. To minimize the time to insert an item in the queue, it doesn't normally store all the items in sorted order.

    0 讨论(0)
  • 2020-11-22 09:24

    Well, as the Javadoc says, that's how it's been implemented. The priority queue probably uses a binary heap as the underlying data structure. When you remove items, the heap is reordered to preserve the heap property.

    Secondly, it's unwise to tie in a specific implementation (forcing a sorted order). With the current implementation, you are free to traverse it in any order and use any implementation.

    0 讨论(0)
  • 2020-11-22 09:30

    Because the underlying data structure doesn't support it. A binary heap is only partially ordered, with the smallest element at the root. When you remove that, the heap is reordered so that the next smallest element is at the root. There is no efficient ordered traversal algorithm so none is provided in Java.

    0 讨论(0)
  • 2020-11-22 09:34

    Binary heaps are an efficient way of implementing priority queues. The only guarantee about order that a heap makes is that the item at the top has the highest priority (maybe it is the "biggest" or "smallest" according to some order). A heap is a binary tree that has the properties: Shape property: the tree fills up from top to bottom left to right Order prperty: the element at any node is bigger (or smaller if smallest has highest priority) than its two children nodes. When the iterator visits all the elements it probably does so in a level-order traversal, i.e. it visits each node in each level in turn before going on to the next level. Since the only guarantee about order that is made that a node has a higher priority than its children, the nodes in each level will be in no particular order.

    0 讨论(0)
提交回复
热议问题