Heim  >  Artikel  >  Java  >  ## Können Sie Prioritäten in einer Java PriorityQueue aktualisieren, ohne sie zu entfernen und erneut einzufügen?

## Können Sie Prioritäten in einer Java PriorityQueue aktualisieren, ohne sie zu entfernen und erneut einzufügen?

Barbara Streisand
Barbara StreisandOriginal
2024-10-25 08:05:02222Durchsuche

## Can You Update Priorities in a Java PriorityQueue Without Removing and Re-Inserting?

Aktualisierung der Priorität in Java PriorityQueues

Bei Verwendung einer PriorityQueue mit einem Komparator für die Objektreihenfolge werden nachfolgende Änderungen an den Klassenvariablen der Objekte (auf welche Priorität berechnet wird) stellen eine Herausforderung dar.

Traditionell besteht eine einfache Lösung darin, das Objekt zu entfernen, seine Werte zu aktualisieren und es erneut einzufügen, wodurch der Komparator der Prioritätswarteschlange ausgelöst wird. Gibt es jedoch eine effizientere Alternative zum Erstellen einer Wrapper-Klasse um die PriorityQueue?

Antwort

Leider bleibt das Entfernen und erneute Einfügen der effektivste Ansatz. PriorityQueues fügen neue Elemente automatisch beim Einfügen an der richtigen Position ein und optimieren so die Warteschlangenleistung. Die Suche nach dem Element mit der höchsten Priorität bei Entnahmevorgängen würde sich erheblich auf die Leistung auswirken.

TreeMaps haben diese Einschränkung gemeinsam mit HashMaps (die fehlschlagen, wenn sich Element-Hashcodes ändern).

Das Erstellen einer Wrapper-Klasse kann erforderlich sein Verschieben des Vergleichscodes von der Warteschlange in die Warteschlange, wodurch eine Sortierung während der Warteschlange entfällt. Dieser Ansatz beeinträchtigt jedoch die Leistung und erfordert eine Synchronisierung bei Prioritätsaktualisierungen. Da in beiden Fällen eine Synchronisierung erforderlich ist, bieten das Entfernen und erneute Einreihen in die Warteschlange eine einfachere und leistungsfähigere Lösung.

Das obige ist der detaillierte Inhalt von## Können Sie Prioritäten in einer Java PriorityQueue aktualisieren, ohne sie zu entfernen und erneut einzufügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn