Comment configurer Java Priority Queue pour ignorer les doublons?
J'ai pensé à ajouter() est censé ignorer les doublons, mais ma sortie a des doublons. Comment faire pour ne pas stocker les doublons?
Je voudrais aussi savoir comment la file d'attente de priorité vérifie si deux éléments sont des doublons. Je suppose que c'est en utilisant le comparateur d'égal à égal, mais je veux juste être sûr.
Grâce
source d'informationauteur sgarg | 2012-05-06
Vous devez vous connecter pour publier un commentaire.
Ici est une partie de PriorityQueue Javadoc:
Donc oui, PriorityQueue utilise Comparateur (si spécifié comme un argument du constructeur) ou utilise compareTo(...) méthode (éléments doivent implémenter l'interface Comparable).
PriorityQueue permet de doublons. Donc, si vous voulez éviter cela, vous devez mettre en place votre propre version de la File d'attente. Vous pouvez trouver très élégant, la façon de le faire dans "Effective Java", page 85. Vous pouvez également étendre PriorityQueue classe et substituer la méthode add (c'est un endroit idéal pour mettre contient (...).
Un
PriorityQueue
en Java n'a pas de restriction en ce qui concerne les éléments en double. Si vous voulez vous assurer que les deux éléments identiques ne sont jamais présents dans la file d'attente de priorité dans le même temps, le moyen le plus simple serait de maintenir un distinctSet
en parallèle avec la file d'attente de priorité. Chaque fois que vous souhaitez insérer un élément dans la file d'attente de priorité, vous pouvez vérifier si l'ensemble contient déjà, si non, puis l'ajouter à la fois le jeu et la file d'attente de priorité. Chaque fois que vous supprimez un élément de la file d'attente de priorité puis il suffit de supprimer cet élément de l'ensemble.Alternativement, selon les opérations que vous souhaitez effectuer sur la file d'attente de priorité, et comment l'égalité est défini dans votre cas, il pourrait être intéressant de le remplacer avec un seul
TreeSet
plutôt car, qui va encore vous permettent d'effectuer toutes les opérations importantes, que vous avez accès à une file d'attente de priorité tout en en outre de ne pas autoriser les doublons.Ensembles sont les seules choses qui ne tiennent pas compte des doublons. Les listes et les files d'attente ne sont pas. (LinkedList est une File d'attente)
Si vous voulez supprimer des doublons, vous pouvez vérifier si l'entrée que vous prenez() est la même que la précédente, et l'ignorer. Vous pouvez faire la comparaison de la manière que vous souhaitez. 😉
Vous pouvez créer un Hachage jeu et de passer de l'objet de Hachage Ensemble de la File d'attente de priorité.
L'un des Constructeur de File d'attente de priorité est
Le code pour implémenter une file d'attente de priorité sans doublons est