Die zeitliche Komplexität gemeinsamer Operationen zu einem "Prioritätsqueue" in Java hängt vom spezifischen Betrieb ab. Hier ist eine Aufschlüsselung:
* `add (e e)` / `Angebot (e e)` (Insertion): O (log n) - Dies liegt daran, dass die Prioritätswarteschlange seine Heap -Eigenschaft beibehalten muss, was das neue Element auf dem Haufen auf dem Weg nach oben oder unten erfordert.
* `remove ()` / `POLL ()` (Entfernung des höchsten Prioritätselements): O (log n) - Entfernen des Stammelements (höchste Priorität) müssen es durch das letzte Element ersetzen und dann das Ersatzelement auf dem Haufen hinunterfliegen, um die Heap -Eigenschaft wiederherzustellen.
* `peek ()` (Zugriff auf das Element mit höchster Priorität): O (1) - Das Spitzen am höchsten Prioritätselement (das Wurzel des Haufens) ist ein direkter Zugriffsvorgang.
* `enthält (Objekt o)`: O (n) - Dies erfordert die Ieration durch die Elemente der Warteschlange, um die Gleichheit zu überprüfen. Prioritäten in Java bieten keinen effizienten Weg, um die Eindämmung zu überprüfen.
* `entfernen (Objekt o)`: O (n) - Ähnlich wie `enthält ()` `, dies beinhaltet die Iterierung der Elemente, um das angegebene Objekt zu finden und zu entfernen. Nach dem Entfernen des Objekts muss die Heap -Eigenschaft aufrechterhalten werden, die im schlimmsten Fall o (n) Zeit in Anspruch nehmen kann. (Das Entfernen eines willkürlichen Elements ist kein Standard -Warteschlangenbetrieb der Standard -Priorität, und die Leistung spiegelt dies wider.)
* `size ()`: O (1) - Die Größe wird als Mitgliedsvariable aufrechterhalten, sodass der Zugriff auf sie ist ein konstanter Zeitvorgang.
* `isempty ()`: O (1) - Überprüft einfach, ob die Größe 0 ist.
* `clear ()`: O (n) - Entfernt alle Elemente aus der Warteschlange. Während die Entfernung des individuellen Elements O (log n) annehmen kann, dauert das Löschen der gesamten Warteschlange O (n). In einigen Implementierungen kann dies tatsächlich als O (1) implementiert werden, indem nur das interne Array und die Größe zurückgesetzt werden.
* `iterator ()`: O (1) - Gibt einen Iterator für die Prioritätswarteschlange zurück. Der Iterator selbst ist * nicht * bestellt, und das Iterieren durch die Elemente ist o (n).
Wichtige Überlegungen:
* `priorityQueue` wird als binärer Haufen implementiert. Die Heap -Datenstruktur verleiht ihr die logarithmische Leistung für das Einsetzen und die Entfernung des höchsten Prioritätselements.
* Der Vergleich ist entscheidend. Der Vergleicher (oder die natürliche Reihenfolge der Elemente, wenn kein Komparator bereitgestellt wird) bestimmt die Priorität von Elementen. Die Vergleichs -Vergleichsmethode des Komparators muss (typischerweise O (1)) für die im gesamten Prioritäts -Warteschlangenvorgänge effizient sein, um ihre angegebene Komplexität aufrechtzuerhalten.
* willkürliche Elemente entfernen (`entfernen (Objekt O)`) ist ineffizient. Wenn Sie häufig willkürliche Elemente aus einer Prioritätswarteschlange entfernen müssen, sollten Sie eine andere Datenstruktur oder eine Kombination von Datenstrukturen verwenden (z. B. ein "Treeset", kombiniert mit einem "Hashmap", um Elementpositionen zu verfolgen). Standard -Prioritätswarteschlangen sind optimiert, um einen effizienten Zugriff auf das höchste Prioritätselement zu erhalten.
Zusammenfassend:
Die wichtigsten Vorgänge von ad () und `remove ()` (des * höchsten * Prioritätselements) sind o (log n), wodurch "PriorityQueue" eine sehr effiziente Auswahl für Szenarien gemacht wird, in denen Sie eine sortierte Sammlung aufrechterhalten und abhängig von Ihrem Vergleichselement wiederholt zugreifen oder entfernen oder entfernen müssen.