85 votes

En quoi la PriorityQueue de Java diffère-t-elle d'un mini-heap ?

Pourquoi ont-ils nommé PriorityQueue si vous ne pouvez pas insertWithPriority ? Cela semble très similaire à un tas. Y a-t-il des différences ? S'il n'y a pas de différence, alors pourquoi a-t-il été nommé PriorityQueue et pas Heap ?

18 votes

Je ne sais pas si cela diffère d'un mini-heap, mais en général, les objets Java sont nommés en fonction de la fonctionnalité qu'ils fournissent, et non en fonction de la façon dont ils sont mis en œuvre.

1 votes

@Daniel Ok, cela explique pourquoi il n'est pas appelé heap, mais pourquoi est-il appelé PriorityQueue s'il ne supporte pas la fonctionnalité d'une file d'attente prioritaire ?

9 votes

Il fait prennent en charge la fonctionnalité d'une file d'attente prioritaire.

6voto

Matt Ball Points 165937

De le site PriorityQueue JavaDocs :

Une file d'attente prioritaire non bornée basée sur un tas de priorités. Les éléments de la file d'attente de priorité sont ordonnés selon leur ordre naturel, ou par un Comparator fourni au moment de la construction de la file d'attente, selon le constructeur utilisé.

La priorité est censée être une propriété inhérente aux objets de la file d'attente. Les éléments sont ordonnés en fonction d'une sorte de comparaison. Pour insérer un objet avec une priorité donnée, il suffit de définir le(s) champ(s) de l'objet qui affecte(nt) le classement, et add() il.


Et, comme @Daniel commenté,

En général, les objets Java sont nommés en fonction de la fonctionnalité qu'ils fournissent, et non en fonction de la manière dont ils sont mis en œuvre.

3voto

Anupam Ghosh Points 164

De http://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html

Une file d'attente prioritaire non bornée basée sur un tas de priorités. Les éléments de la file d'attente de priorité sont ordonnés selon leur ordre naturel ou par un Comparateur fourni au moment de la construction de la file d'attente

pour les types de données suivants : entier, long, flottant, double, caractère, booléen (c'est-à-dire les types de données primitifs), l'option ordre naturel est l'ordre ascendant, c'est pourquoi Arrays.sort(arr) {où arr est un tableau de type primitif} trie la valeur de arr dans l'ordre ascendant. Vous pouvez modifier l'ordre naturel en utilisant une fonction Comparateur

Le comparateur peut être utilisé de deux façons

  • L'un des moyens est de savoir comment DpGeek a montré

  • Une autre façon est d'utiliser Classe anonyme . Par exemple

    Arrays.sort(arr, new Comparator<Integer>() { public int compare(Integer x, Integer y) { return y - x; } });

  • Si vous avez java8 alors vous pouvez utiliser l'expression lambda

Arrays.sort(arr, (Integer x, Integer y) -> y - x);

Cela trie le tableau arr dans l'ordre décroissant

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X