Maison  >  Article  >  Java  >  ## Pouvez-vous mettre à jour les priorités dans une PriorityQueue Java sans les supprimer ni les réinsérer ?

## Pouvez-vous mettre à jour les priorités dans une PriorityQueue Java sans les supprimer ni les réinsérer ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-25 08:05:02222parcourir

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

Mise à jour de la priorité dans Java PriorityQueues

Lors de l'utilisation d'une PriorityQueue avec un comparateur pour l'ordre des objets, les modifications ultérieures apportées aux variables de classe des objets (lorsque quelle priorité est calculée) présentent un défi.

Traditionnellement, une solution simple consiste à supprimer l'objet, à mettre à jour ses valeurs et à le réinsérer, déclenchant ainsi le comparateur de la file d'attente prioritaire. Cependant, existe-t-il une alternative plus efficace à la création d'une classe wrapper autour de PriorityQueue ?

Answer

Malheureusement, la suppression et la réinsertion restent l'approche la plus efficace. Les PriorityQueues insèrent intrinsèquement de nouveaux éléments dans la position appropriée lors de l'insertion, optimisant ainsi les performances de la file d'attente. La recherche de l'élément ayant la priorité la plus élevée lors des opérations de retrait de la file d'attente aurait un impact significatif sur les performances.

Les TreeMaps partagent cette limitation, ainsi que les HashMaps (qui échouent si les codes de hachage des éléments changent).

La création d'une classe wrapper peut impliquer déplacer le code de comparaison de la mise en file d'attente à la sortie de la file d'attente, éliminant ainsi le besoin de tri pendant la mise en file d'attente. Cependant, cette approche compromet les performances et nécessite une synchronisation lors des mises à jour prioritaires. Étant donné que la synchronisation est nécessaire dans les deux cas, retirer et remettre en file d'attente offrent une solution plus simple et plus performante.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn