En Java, que dois-je utiliser pour une PriorityQueue qui renvoie d’abord le plus grand élément?

StackOverflow https://stackoverflow.com/questions/627130

  •  06-07-2019
  •  | 
  •  

Question

PriorityQueue de Java le moindre élément en tête de liste, mais j'en ai besoin pour placer le plus grand élément en tête. Quel est le moyen le plus simple d’obtenir une file d’attente prioritaire qui se comporte de la sorte?

Puisque j'ai écrit la classe stockée dans cette file d'attente, je pouvais simplement inverser les résultats de compareTo, elle n'est pas utilisée en dehors de cette file d'attente.

Même si j'aime faire du code une représentation précise de ce que je modélise, ce que j'essaie de faire, c'est d'obtenir le meilleur résultat en premier. Le code devrait donc indiquer cela plutôt que le moins le premier, avec une définition inhabituelle du moins.

[modifier] juste un petit merci à tous, Comparator sonne comme ce dont j’ai besoin dès que je m’apprends à en écrire un.

Était-ce utile?

La solution

Passer un comparateur / a> qui inverse l'ordre naturel lorsque vous instanciez le PriorityQueue .

Cela ressemblerait à quelque chose comme ça:

public class ReverseYourObjComparator implements Comparator<YourObj> {
    public int compare(final YourObj arg0, final YourObj arg1) {
        return 0 - arg0.compareTo(arg1);
    }
}

Autres conseils

La question est la suivante: vous pouvez transmettre un Comparateur au constructeur d'un PriorityQueue . Le comparateur influencera la manière dont les articles seront commandés.

Je voudrais juste utiliser un comparateur. De cette façon, l'ordre de tri est utilisé uniquement dans votre file d'attente, plutôt que d'être attaché à votre classe.

Fournissez simplement le PriorityQueue Custom Comparator<? super E> via le constructeur et modifiez l'ordre des éléments.

À partir des javadocs:

PriorityQueue(int initialCapacity, Comparator<? super E> comparator) 

Pour ajouter des commentaires au comparateur, consultez:

Collections.reverseOrder();

La documentation de l'API sur PriorityQueue indique: & "La tête de cette file d'attente est l'élément le moins important par rapport à l'ordre spécifié &"; La définition du moins est donc subjective en fonction de votre ordre. C'est pourquoi vous avez la possibilité de fournir un comparateur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top