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 ?
Réponses
Trop de publicités?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.
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
- Réponses précédentes
- Plus de réponses
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.
0 votes
min-heap
ymax-heap
sont tous deuxpriority queue
Cela dépend de la façon dont vous définissez l'ordre de priorité. En d'autres termes, une file d'attente prioritaire peut être un min-heap ou un max-heap dans votre algorithme.