我当前正在使用Java Priority Queue以及HashMap来引用和更新Priority Queue中的值。但是,由于更新的值将导致PriorityQueue丢失其堆属性,因此我需要再次堆集PriorityQueue。但是,Java PriorityQueue API https://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html
中没有heapify()方法。我想知道是否仍然可以堆放Java PriorityQueue。我已阅读:java heapify method using priorityQueue,但添加了
if (!pq.isEmpty())
{pq.offer(pq.poll()); }
不能真正解决问题,因为它不能堆满我的整个堆:
e.g PriorityQueue has 8 elements,
update 6th element in PriorityQueue with help from HashMap,
use pq.offer(pq.poll());
PriorityQueue heapifies down from the subtree is smaller, ignoring the other subtree.
PriorityQueue heapifies up the root that we just removed from the child vertex to the root only
我知道这可能不是一种非常有效的方法,但是无论如何,我是否可以在Java PriorityQueue上使用heapify将其再次还原为最小堆?