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!