Die PriorityQueue
ist als eine ausgeglichene binäre Heap implementiert als ein Array implementiert. Wenn ein Element entfernt wird, muss sich der Heap neu anordnen, um die Reihenfolge des Heapspeichers beizubehalten.
Der Beweis ist in den Kommentaren
/**
* Priority queue represented as a balanced binary heap: the two
* children of queue[n] are queue[2*n+1] and queue[2*(n+1)]. The
* priority queue is ordered by comparator, or by the elements'
* natural ordering, if comparator is null: For each node n in the
* heap and each descendant d of n, n <= d. The element with the
* lowest value is in queue[0], assuming the queue is nonempty.
*/
private transient Object[] queue;
Auch in der Klasse javadoc
Implementierung Hinweis: Diese Implementierung stellt O (log (n)) Zeit für die Enqueing und dequeing Methoden (anbieten, abstimmen, entfernen() und hinzufügen); lineare Zeit für das Entfernen (Object) und enthält (Object) Methoden; und Konstante Zeit für die Abrufmethoden (Peek, Element und Größe).
Für remove()
, zum Beispiel, entfernen Sie die Wurzel des Heap. Du nimmst das letzte Element, d. rechten Blatt auf der letzten Ebene des Binärbaums, und setzen Sie es als root und machen Sie sieben, bis es seinen Platz findet (basierend auf Comparator
). Das dauert im schlimmsten Fall O(log n)
Zeit.
Ich habe gerade überprüft die Dokumentation und es gab nichts dazu angegeben. Ich bin gespannt auf die Antwort! – templatetypedef
Danke, froh zu wissen, dass mir nichts zu offensichtlich fehlt! – chm