java priority queue tutorial implementation examples
Aquest tutorial explica la cua de prioritat de Java i conceptes relacionats com ara Comparador, mínima i màxima de la cua de prioritat juntament amb la seva implementació amb exemples:
L'estructura de dades de la cua de prioritat és una cua especial en què els elements no es presenten segons l'ordre FIFO, sinó d'acord amb els elements naturals o qualsevol comparador personalitzat utilitzat durant la creació de la cua.
=> Feu una ullada a la guia per a principiants de Java aquí.
Què aprendreu:
Cua de prioritat a Java
A Priority Queue, la part davantera de la cua té el mínim d’elements segons l’ordenació natural i la part posterior apunta cap a l’element més gran de la cua.
A continuació es mostra un exemple de cua de prioritat que consisteix en nombres.
el millor programari de text a veu
Així, quan s’elimina un element de la cua de prioritat que es mostra més amunt, llavors serà l’element mínim.
De la mateixa manera, per a una cua de prioritat alfabètica, es tindran en compte els valors ASCII i els elements de la cua s'ordenaran segons els valors ASCII.
A continuació es detallen algunes de les principals característiques de la PriorityQueue:
- PriorityQueue és una cua sense lligar.
- PriorityQueue no permet valors nuls.
- Per a objectes no comparables, no podem crear una cua de prioritat.
- PriorityQueue hereta de classes com AbstractQueue, AbstractCollection, Collection i Object.
- El cap o la part frontal de la cua conté el mínim element segons l’ordenació natural.
- La implementació de la cua de prioritat no és segura per a fils. Per tant, si desitgem accés sincronitzat, hauríem d’utilitzar PriorityBlockingQueue.
La classe PriorityQueue hereta la interfície de cua de Java i forma part del paquet java.util.
A continuació es proporciona la declaració general de la classe PriorityQueue:
public class PriorityQueue extends AbstractQueue implements Serializable
El diagrama següent mostra la jerarquia de classes de la classe PriorityQueue.
Complexitat temporal de la cua de prioritat
- La complexitat temporal de la cua de prioritat per als mètodes d’inserció (cola) i eliminació (cola) és O (log (n)).
- Priority Queue té una complexitat lineal de temps per eliminar i conté mètodes.
- Els mètodes que recuperen elements de la cua de prioritat tenen una complexitat temporal constant.
Exemple de cua de prioritat a Java
El programa següent mostra una senzilla PriorityQueue a Java. Creem un objecte de la classe PriorityQueue, hi afegim valors i, a continuació, mostrem el contingut de la cua mitjançant Iterator.
import java.util.*; class Main{ public static void main(String args()){ PriorityQueue cities_queue=new PriorityQueue(); //initialize the PriorityQueue with values cities_queue.add('Sydney'); cities_queue.add('Venice'); cities_queue.add('New York'); cities_queue.add('California'); cities_queue.add('Melbourne'); //print the head of the PriorityQueue System.out.println('PriorityQueue Head:'+cities_queue.element()); //Define the iterator for PriorityQueue and print its elements System.out.println('
PriorityQueue contents:'); Iterator iter=cities_queue.iterator(); while(iter.hasNext()){ System.out.print(iter.next() + ' '); } } }
Sortida:
Mètodes d'API de cua de prioritat de Java
Constructors:
Prototip de constructor | Descripció | |
---|---|---|
ullada | E peek () | Retorna el cap de la cua sense suprimir l'element. |
PriorityQueue () | Un constructor per defecte que crea un objecte PriorityQueue amb capacitat inicial com a 1. | |
PriorityQueue (col·lecció c) | Crea un objecte PriorityQueue amb elements inicials de la col·lecció donada c. | |
PriorityQueue (int initialCapacity) | Crea un objecte PriorityQueue amb la 'capacitat inicial' proporcionada. Els elements s’ordenen segons l’ordenació natural. | |
PriorityQueue (int initialCapacity, comparador comparador) | Crea un objecte PriorityQueue amb la 'capacitat inicial' proporcionada. Els elements s’ordenen segons el comparador donat. | |
PriorityQueue (PriorityQueue c) | Crea un objecte PriorityQueue a partir d’un altre objecte PriorityQueue donat per c. | |
PriorityQueue (SortedSet c) | Crea un objecte PriorityQueue a partir d’un SortedSet donat per c. |
Mètodes
Mètode | Mètode prototip | Descripció |
---|---|---|
afegir | addició booleana (E e) | Afegeix l'element e a la PriorityQueue. |
clar | void clear () | Esborra la PriorityQueue suprimint tots els elements. |
comparador | Comparatorcomparator () | Retorna un comparador personalitzat utilitzat per ordenar els elements de la cua. |
conté | booleà conté (Objecte o) | Comprova si la PriorityQueue conté l’element donat o. Retorna cert si és afirmatiu. |
iterador | Iteratoriterator () | Mètode per obtenir un iterador per a la PriorityQueue donada. |
oferta | oferta booleana (E e) | Inseriu l’element donat e a la PriorityQueue. |
enquesta | Enquesta E () | Elimina i retorna el cap de la cua. Retorna nul si la cua està buida. |
eliminar | eliminar booleà (objecte o) | Elimina una instància d'un determinat element o si és present a la cua. |
mida | int size () | Retorna la mida o el nombre d'elements d'aquesta PriorityQueue. |
toArray | Objecte () toArray () | Retorna una representació de matriu de la PriorityQueue donada. |
toArray | T () toArray (T () a) | Retorna una representació de matriu per a la cua de prioritat donada amb el mateix tipus d'execució que la matriu especificada a. |
Implementació a Java
Demostrem els mètodes anteriors de PriorityQueue mitjançant un programa Java.
import java.util.*; class Main { public static void main(String args()) { // Creating empty priority queue PriorityQueue numQueue = new PriorityQueue(); // add elements to numQueue using add() numQueue.add('Five'); numQueue.add('One'); numQueue.add('Seven'); numQueue.add('Three'); numQueue.add('Eleven'); numQueue.add('Nine'); // Print the head element using Peek () method System.out.println('Head element using peek method:' + numQueue.peek()); // Printing all elements System.out.println('
The PriorityQueue elements:'); Iterator iter1 = numQueue.iterator(); while (iter1.hasNext()) System.out.print(iter1.next() + ' '); // remove head with poll () numQueue.poll(); System.out.println('
After removing an element' + 'with poll function:'); Iterator iter2 = numQueue.iterator(); while (iter2.hasNext()) System.out.print(iter2.next() + ' '); // Remove 'Three' using remove () numQueue.remove('Three'); System.out.println('
Element 'Three' with' + ' remove function:'); Iterator iter3 = numQueue.iterator(); while (iter3.hasNext()) System.out.print(iter3.next() + ' '); // Check if an element is present in PriorityQueue using contains() boolean ret_val = numQueue.contains('Five'); System.out.println('
Priority queue contains 'Five' ' + 'or not?: ' + ret_val); // get array equivalent of PriorityQueue with toArray () Object() numArr = numQueue.toArray(); System.out.println('
Array Contents: '); for (int i = 0; i Sortida:
millor programari d'actualització de controladors de Windows 10
Cua de prioritat a Java 8
Java 8 afegeix un mètode més a la classe PriorityQueue, és a dir, ‘spliterator ()’.
A continuació es detallen els detalls d’aquest mètode.
Nom del mètode: divisor
Prototip de mètode: public final Spliterator spliterator ()
Descripció del mètode: Aquest mètode crea un divisor sobre els elements PriorityQueue. Aquest divisor s’uneix tard i es fa ràpidament.
Comparador de cues prioritàries
Com ja s’ha esmentat, els elements PriorityQueue s’ordenen naturalment. Si volem canviar l’ordenació, hauríem d’especificar un comparador i utilitzar-lo durant la creació de l’objecte PriorityQueue. La PriorityQueue fa servir aquest comparador per ordenar-ne els elements.
El programa Java següent mostra l’ús d’un comparador personalitzat per a l’ordenació d’elements. En aquest programa, definim un nou comparador personalitzat dins del qual substituïm el mètode 'compare'. El mètode de comparació s’utilitza per ordenar els elements de la PriorityQueue segons la longitud.
import java.util.*; public class Main { public static void main(String() args) { // A custom comparator that compares two Strings by their length. Comparator customComparator = new Comparator() { @Override public int compare(String s1, String s2) { return s1.length() - s2.length(); } }; // Create a Priority Queue with a custom Comparator PriorityQueue colorsPriorityQueue = new PriorityQueue(customComparator); // Add items to a Priority Queue colorsPriorityQueue.add('Red'); colorsPriorityQueue.add('Green'); colorsPriorityQueue.add('Blue'); colorsPriorityQueue.add('Cyan'); colorsPriorityQueue.add('Magenta'); colorsPriorityQueue.add('Yellow'); // Printing all elements System.out.println('
The PriorityQueue elements with custom Comparator:'); Iterator iter1 = colorsPriorityQueue.iterator(); while (iter1.hasNext()) System.out.print(iter1.next() + ' '); } }
Sortida:
Cua de prioritat mínima a Java
L'ordenació natural de la cua de prioritat té l'element mínim o més petit a la part superior de la cua i, per tant, l'ordenació és ascendent. Això s'anomena 'cua de prioritat mínima' amb un ordre ascendent d'elements.
El programa Java següent mostra la implementació de la cua de prioritat mínima a Java.
import java.util.*; class Main{ public static void main(String args()){ //declare a PriorityQueue object with default ordering PriorityQueue pq = new PriorityQueue(); //add element to the PriorityQueue pq.add(8); pq.add(6); pq.add(4); pq.add(2); pq.add(12); pq.add(10); //display the min PriorityQueue System.out.println('The min Priority Queue (natural ordering) contents:'); Integer val = null; while( (val = pq.poll()) != null) { System.out.print(val + ' '); } } }
Sortida:
Cua de màxima prioritat a Java
Tot i que la cua de prioritat mínima té elements en ordre ascendent, la cua de prioritat màxima té els elements en ordre descendent, és a dir, el cap de la cua de prioritat màxima retornarà l’element més gran de la cua.
El programa Java següent mostra la cua de màxima prioritat a Java.
import java.util.*; class Main{ public static void main(String args()){ //declare a PriorityQueue object with custom comparator to generate max PQ PriorityQueue pq = new PriorityQueue(new Comparator() { public int compare(Integer lhs, Integer rhs) { if (lhs Sortida:
Com es mostra al programa anterior, per canviar l'ordenació natural dels elements a la cua de prioritat, hem de definir un comparador personalitzat.
Preguntes freqüents
P # 1) Quina és la cua de prioritat a Java?
Resposta: Una cua especial en què s’ordenen tots els elements de la cua segons l’ordre natural o mitjançant un comparador personalitzat s’anomena cua de prioritat. No segueix l'ordre FIFO.
Q # 2) Com s'estableix una cua de màxima prioritat a Java?
Resposta: Podem establir una cua de màxima prioritat a Java mitjançant un comparador personalitzat de manera que el cap de la cua retornarà l’element més gran de la cua.
P # 3) La cua Priority permet duplicar Java?
Resposta: Sí. Priority Queue permet duplicar valors.
Q # 4) La cua de prioritat de Java és màxima o mínima?
Resposta: Per defecte, la cua de prioritat a Java és min Cua de prioritat amb ordre natural. Per fer-ho màxim, hem d’utilitzar un comparador personalitzat perquè el cap de cua retorni l’element més gran de la cua.
P # 5) S'ordena una cua de prioritat?
Resposta: Per defecte, el cap de la cua s'ordena i la cua de prioritat té el mínim element com a cap. La resta d’elements s’ordena quan es requereix.
Conclusió
Això completa el tutorial sobre cues de prioritat a Java. Priority Queue implementa una interfície de cua i és una cua especial on s’ordenen els elements segons l’ordenació natural. No segueix l'ordre FIFO. Per canviar l’ordenació natural de la cua de prioritat, podem utilitzar el comparador personalitzat.
enginyer de desenvolupament de programari en preguntes d’entrevistes de prova
Les cues de prioritat s’utilitzen principalment per a la planificació d’impressores, la planificació de tasques de la CPU, etc. El muntatge (mínim o màxim) també s’implementa mitjançant les cues de prioritat.
=> Llegiu la sèrie de formació Java fàcil.
Lectura recomanada
- Estructura de dades de la cua de prioritat en C ++ amb il·lustració
- Cua de prioritat a STL
- Cua de Java: mètodes de cua, implementació de cues amb exemples
- Estructura de dades de la cua circular C ++: implementació i aplicacions
- Cua de doble finalitat (Deque) a C ++ amb exemples
- Estructura de dades de la cua en C ++ amb il·lustració
- Piles i cues a STL
- Tutorial JAVA per a principiants: més de 100 tutorials pràctics de vídeo Java