PriorityQueue tiek izmantota, ja ir paredzēts, ka objekti ir jāapstrādā, pamatojoties uz prioritāti. Ir zināms, ka a Rinda seko algoritmam First-In-First-Out, bet dažreiz rindas elementi ir jāapstrādā atbilstoši prioritātei, tad tiek aktivizēta PriorityQueue.
PriorityQueue ir balstīta uz prioritāšu kaudzi. Prioritārās rindas elementi tiek sakārtoti pēc dabiskās secības vai rindas veidošanas laikā nodrošinātā Comparator atkarībā no tā, kurš konstruktors tiek izmantots.

Tālāk norādītajā prioritātes rindā elementam ar maksimālo ASCII vērtību būs augstākā prioritāte.

Deklarācija:
public class PriorityQueue extends AbstractQueue implements Serializable where E is the type of elements held in this queue>
Klase īsteno Serializējams , Atkārtojams , Kolekcija , Rinda saskarnes.
Daži svarīgi punkti prioritāšu rindā ir šādi:
- PriorityQueue neļauj nullei.
- Mēs nevaram izveidot nesalīdzināmu objektu PriorityQueue
- PriorityQueue ir nesaistītas rindas.
- Šīs rindas virsraksts ir vismazākais elements attiecībā uz norādīto secību. Ja vairāki elementi ir piesaistīti vismazākajai vērtībai, galva ir viens no šiem elementiem — saites tiek pārtrauktas patvaļīgi.
- Tā kā PriorityQueue nav droša pavedienam, java nodrošina PriorityBlockingQueue klasi, kas ievieš saskarni BlockingQueue lietošanai Java daudzpavedienu vidē.
- Rindas izguves operācijas aptaujā, noņem, apskata un elementam piekļūst rindas sākumā esošajam elementam.
- Tas nodrošina O(log(n)) laiku pievienošanas un aptaujas metodēm.
- Tā manto metodes no AbstractQueue , AbstractCollection , Kolekcija, un Objekts klasē.
Konstruktori:
1. PriorityQueue(): Izveido PriorityQueue ar noklusējuma sākotnējo ietilpību (11), kas sakārto elementus atbilstoši to dabiskajai secībai.
PriorityQueue pq = new PriorityQueue();
2. PriorityQueue (C kolekcija): Izveido PriorityQueue, kurā ir norādītās kolekcijas elementi.
PriorityQueue pq = new PriorityQueue(Kolekcija c);
3. Prioritātes rinda (sākotnējā ietilpība) : izveido PriorityQueue ar norādīto sākotnējo jaudu, kas sakārto elementus atbilstoši to dabiskajai secībai.
PriorityQueue pq = new PriorityQueue(int sākotnējāCapacity);
4. PriorityQueue (int sākotnējāCapacity, Comparator komparators): Izveido PriorityQueue ar norādīto sākotnējo jaudu, kas sakārto savus elementus atbilstoši norādītajam salīdzinājumam.
PriorityQueue pq = new PriorityQueue(int sākotnējāCapacity, Comparator komparators);
5. PriorityQueue(PriorityQueue c) : izveido PriorityQueue, kurā ir norādītās prioritātes rindas elementi.
PriorityQueue pq = new PriorityQueue(PriorityQueue c);
6. PriorityQueue (SortedSet c) : izveido prioritāro rindu, kurā ir norādītās sakārtotās kopas elementi.
PriorityQueue pq = new PriorityQueue(SortedSet c);
7. PriorityQueue (salīdzināšanas līdzeklis): Izveido PriorityQueue ar noklusējuma sākotnējo ietilpību un kuras elementi ir sakārtoti atbilstoši norādītajam salīdzinājumam.
PriorityQueue pq = new PriorityQueue(Comparator c);
Piemērs:
Tālāk esošajā piemērā ir izskaidrotas šādas prioritātes rindas pamatdarbības.
int uz virkni konvertēšanu java
- Būla add(E elements): šī metode ievieto norādīto elementu šajā prioritātes rindā.
- public peek(): šī metode izgūst, bet nenoņem šīs rindas galveni vai atgriež nulli, ja šī rinda ir tukša.
- publiskā aptauja (): šī metode izgūst un noņem šīs rindas galveni vai atgriež nulli, ja šī rinda ir tukša.
Java
// Java program to demonstrate the> // working of PriorityQueue> import> java.util.*;> class> PriorityQueueDemo {> > >// Main Method> >public> static> void> main(String args[])> >{> >// Creating empty priority queue> >PriorityQueue pQueue =>new> PriorityQueue();> >// Adding items to the pQueue using add()> >pQueue.add(>10>);> >pQueue.add(>20>);> >pQueue.add(>15>);> >// Printing the top element of PriorityQueue> >System.out.println(pQueue.peek());> >// Printing the top element and removing it> >// from the PriorityQueue container> >System.out.println(pQueue.poll());> >// Printing the top element again> >System.out.println(pQueue.peek());> >}> }> |
>
>Izvade
10 10 15>
Darbības PriorityQueue
Apskatīsim, kā veikt dažas bieži izmantotās darbības klasē Priority Queue.
1. Elementu pievienošana: Lai pievienotu elementu prioritārajai rindai, mēs varam izmantot add() metodi. Ievietošanas secība netiek saglabāta PriorityQueue. Elementi tiek saglabāti, pamatojoties uz prioritātes secību, kas pēc noklusējuma ir augoša.
Java
/*package whatever //do not write package name here */> import> java.util.*;> import> java.io.*;> > public> class> PriorityQueueDemo {> > >public> static> void> main(String args[])> >{> >PriorityQueue pq =>new> PriorityQueue();> >for>(>int> i=>0>;i<>3>;i++){> >pq.add(i);> >pq.add(>1>);> >}> >System.out.println(pq);> >}> }> |
>
>Izvade
[0, 1, 1, 1, 2, 1]>
Mēs nesaņemsim sakārtotus elementus, drukājot PriorityQueue.
Java
/*package whatever //do not write package name here */> import> java.util.*;> import> java.io.*;> > public> class> PriorityQueueDemo {> > >public> static> void> main(String args[])> >{> >PriorityQueue pq =>new> PriorityQueue();> > >pq.add(>'Geeks'>);> >pq.add(>'For'>);> >pq.add(>'Geeks'>);> > >System.out.println(pq);> >}> }> |
>
>Izvade
[For, Geeks, Geeks]>
2. Elementu noņemšana: Lai noņemtu elementu no prioritārās rindas, mēs varam izmantot metodi remove(). Ja ir vairāki šādi objekti, tiek noņemta pirmā objekta parādīšanās. Bez tam, lai noņemtu galvu un atgrieztu to, tiek izmantota arī aptauja () metode.
Java
// Java program to remove elements> // from a PriorityQueue> import> java.util.*;> import> java.io.*;> public> class> PriorityQueueDemo {> >public> static> void> main(String args[])> >{> >PriorityQueue pq =>new> PriorityQueue();> >pq.add(>'Geeks'>);> >pq.add(>'For'>);> >pq.add(>'Geeks'>);> >System.out.println(>'Initial PriorityQueue '> + pq);> >// using the method> >pq.remove(>'Geeks'>);> >System.out.println(>'After Remove - '> + pq);> >System.out.println(>'Poll Method - '> + pq.poll());> >System.out.println(>'Final PriorityQueue - '> + pq);> >}> }> |
>
>Izvade
Initial PriorityQueue [For, Geeks, Geeks] After Remove - [For, Geeks] Poll Method - For Final PriorityQueue - [Geeks]>
3. Piekļuve elementiem: Tā kā rindā tiek ievērots princips First In First Out, mēs varam piekļūt tikai rindas galvai. Lai piekļūtu elementiem no prioritārās rindas, mēs varam izmantot peek() metodi.
Java
// Java program to access elements> // from a PriorityQueue> import> java.util.*;> class> PriorityQueueDemo {> > >// Main Method> >public> static> void> main(String[] args)> >{> >// Creating a priority queue> >PriorityQueue pq =>new> PriorityQueue();> >pq.add(>'Geeks'>);> >pq.add(>'For'>);> >pq.add(>'Geeks'>);> >System.out.println(>'PriorityQueue: '> + pq);> >// Using the peek() method> >String element = pq.peek();> >System.out.println(>'Accessed Element: '> + element);> >}> }> |
>
>Izvade
PriorityQueue: [For, Geeks, Geeks] Accessed Element: For>
4. PriorityQueue atkārtošana: Ir vairāki veidi, kā atkārtot PriorityQueue. Slavenākais veids ir pārveidot rindu par masīvu un šķērsot, izmantojot for cilpu. Tomēr rindai ir arī iebūvēts iterators, ko var izmantot rindas atkārtošanai.
Java
// Java program to iterate elements> // to a PriorityQueue> import> java.util.*;> public> class> PriorityQueueDemo {> >// Main Method> >public> static> void> main(String args[])> >{> >PriorityQueue pq =>new> PriorityQueue();> >pq.add(>'Geeks'>);> >pq.add(>'For'>);> >pq.add(>'Geeks'>);> >Iterator iterator = pq.iterator();> >while> (iterator.hasNext()) {> >System.out.print(iterator.next() +>' '>);> >}> >}> }> |
>
>Izvade
For Geeks Geeks>
Piemērs:
Java
import> java.util.PriorityQueue;> public> class> PriorityQueueExample {> >public> static> void> main(String[] args) {> > >// Create a priority queue with initial capacity 10> >PriorityQueue pq =>new> PriorityQueue(>10>);> > >// Add elements to the queue> >pq.add(>3>);> >pq.add(>1>);> >pq.add(>2>);> >pq.add(>5>);> >pq.add(>4>);> > >// Print the queue> >System.out.println(>'Priority queue: '> + pq);> > >// Peek at the top element of the queue> >System.out.println(>'Peek: '> + pq.peek());> > >// Remove the top element of the queue> >pq.poll();> > >// Print the queue again> >System.out.println(>'Priority queue after removing top element: '> + pq);> > >// Check if the queue contains a specific element> >System.out.println(>'Does the queue contain 3? '> + pq.contains(>3>));> > >// Get the size of the queue> >System.out.println(>'Size of queue: '> + pq.size());> > >// Remove all elements from the queue> >pq.clear();> > >// Check if the queue is empty> >System.out.println(>'Is the queue empty? '> + pq.isEmpty());> >}> }> |
>
atgriežot masīvu java
>Izvade
Priority queue: [1, 3, 2, 5, 4] Peek: 1 Priority queue after removing top element: [2, 3, 4, 5] Does the queue contain 3? true Size of queue: 4 Is the queue empty? true>
Reāllaika piemēri:
Prioritātes rinda ir datu struktūra, kurā elementi ir sakārtoti pēc prioritātes, un augstākās prioritātes elementi tiek parādīti rindas priekšpusē. Šeit ir daži reāli piemēri, kur var izmantot prioritārās rindas.
- Uzdevumu plānošana: operētājsistēmās prioritārās rindas tiek izmantotas, lai ieplānotu uzdevumus, pamatojoties uz to prioritāšu līmeņiem. Piemēram, augstas prioritātes uzdevumu, piemēram, kritisku sistēmas atjauninājumu, var ieplānot pirms zemākas prioritātes uzdevuma, piemēram, fona dublēšanas procesa. Neatliekamās palīdzības telpa: Slimnīcas neatliekamās palīdzības nodaļā pacienti tiek pārbaudīti, pamatojoties uz viņu stāvokļa nopietnību, vispirms ārstējot tos, kuri atrodas kritiskā stāvoklī. Prioritāro rindu var izmantot, lai pārvaldītu kārtību, kādā pacienti saņem ārsti un medmāsas. Tīkla maršrutēšana: datortīklos prioritārās rindas tiek izmantotas, lai pārvaldītu datu pakešu plūsmu. Augstas prioritātes paketēm, piemēram, balss un video datiem, var tikt piešķirta prioritāte salīdzinājumā ar zemākas prioritātes datiem, piemēram, e-pastu un failu pārsūtīšanu. Transports: satiksmes vadības sistēmās prioritārās rindas var izmantot, lai pārvaldītu satiksmes plūsmu. Piemēram, neatliekamās palīdzības transportlīdzekļiem, piemēram, ātrās palīdzības automašīnām, var būt prioritāte salīdzinājumā ar citiem transportlīdzekļiem, lai nodrošinātu, ka tie var ātri sasniegt galamērķi. Darba plānošana: darbu plānošanas sistēmās prioritārās rindas var izmantot, lai pārvaldītu darbu izpildes secību. Augstas prioritātes darbus, piemēram, kritiskos sistēmas atjauninājumus, var ieplānot pirms zemākas prioritātes darbiem, piemēram, datu dublēšanas. Tiešsaistes tirgi : tiešsaistes tirgos prioritārās rindas var izmantot, lai pārvaldītu produktu piegādi klientiem. Augstas prioritātes pasūtījumiem, piemēram, ekspressūtīšanai, var tikt piešķirta prioritāte salīdzinājumā ar standarta piegādes pasūtījumiem.
Kopumā prioritārās rindas ir noderīga datu struktūra uzdevumu un resursu pārvaldībai, pamatojoties uz to prioritāšu līmeņiem dažādos reālās pasaules scenārijos.
Metodes PriorityQueue klasē
| METODE | APRAKSTS |
|---|---|
| pievienot (un un) | Ievieto norādīto elementu šajā prioritātes rindā. |
| skaidrs () | Noņem visus elementus no šīs prioritārās rindas. |
| salīdzinājums () | Atgriež salīdzinātāju, kas izmantots, lai sakārtotu elementus šajā rindā, vai nulli, ja šī rinda ir sakārtota atbilstoši tās elementu dabiskajai secībai. |
| satur? (Objekts o) | Atgriež vērtību True, ja šajā rindā ir norādīts elements. |
| par katru? (Patērētāja rīcība) | Veic norādīto darbību katram iterable elementam, līdz visi elementi ir apstrādāti vai darbība rada izņēmumu. |
| iterators () | Atgriež iteratoru virs elementiem šajā rindā. |
| piedāvājums? (E e) | Ievieto norādīto elementu šajā prioritātes rindā. |
| noņemt? (Objekts o) | No šīs rindas noņem vienu norādītā elementa gadījumu, ja tāds ir. |
| noņemt visu? (C kolekcija) | Noņem visus šīs kolekcijas elementus, kas arī ir ietverti norādītajā kolekcijā (neobligāta darbība). |
| RemoveIf? (Predikātu filtrs) | Noņem visus šīs kolekcijas elementus, kas atbilst norādītajam predikātam. |
| paturēt visu? (C kolekcija) | Saglabā tikai tos šīs kolekcijas elementus, kas ir ietverti norādītajā kolekcijā (neobligāta darbība). |
| sadalītājs () | Šīs rindas elementiem izveido vēlu saistošu un ātru atteices sadalītāju. |
| toArray() | Atgriež masīvu, kurā ir visi šīs rindas elementi. |
| toArray?(T[] a) | Atgriež masīvu, kurā ir visi šīs rindas elementi; atgrieztā masīva izpildlaika veids ir norādītā masīva izpildlaika veids. |
Metodes, kas deklarētas klasē java.util.AbstractQueue
| METODE | APRAKSTS |
|---|---|
| pievienot visu (c kolekcija) | Šai rindai pievieno visus norādītās kolekcijas elementus. |
| elements() | Izgūst, bet nenoņem šīs rindas vadītāju. |
| noņemt () | Izgūst un noņem šīs rindas galveni. |
Metodes, kas deklarētas klasē java.util.AbstractCollection
| METODE | APRAKSTS |
|---|---|
| satur visu (c kolekcija) | Atgriež vērtību True, ja šajā kolekcijā ir visi norādītās kolekcijas elementi. |
| ir tukšs() | Atgriež vērtību True, ja šajā kolekcijā nav elementu. |
| toString() | Atgriež šīs kolekcijas virknes attēlojumu. |
Interfeisā java.util.Collection deklarētās metodes
| METODE | APRAKSTS |
|---|---|
| satur visu (c kolekcija) | Atgriež vērtību True, ja šajā kolekcijā ir visi norādītās kolekcijas elementi. |
| vienāds (Objekts o) | Vienlīdzības labad salīdzina norādīto objektu ar šo kolekciju. |
| hashCode() | Atgriež šīs kolekcijas jaucējkoda vērtību. |
| ir tukšs() | Atgriež vērtību True, ja šajā kolekcijā nav elementu. |
| parallelStream() | Atgriež, iespējams, paralēlu straumi, kuras avots ir šī kolekcija. |
| Izmērs() | Atgriež šīs kolekcijas elementu skaitu. |
| straume () | Atgriež secīgu straumi, kuras avots ir šī kolekcija. |
| toArray (IntFunction ģenerators) | Atgriež masīvu, kurā ir visi šīs kolekcijas elementi, izmantojot nodrošināto ģeneratora funkciju, lai piešķirtu atgriezto masīvu. |
Interfeisā java.util.Queue deklarētās metodes
| METODE | APRAKSTS |
|---|---|
| palūrēt () | Izgūst, bet nenoņem šīs rindas galveni vai atgriež nulli, ja šī rinda ir tukša. |
| aptauja () | Izgūst un noņem šīs rindas galveni vai atgriež nulli, ja šī rinda ir tukša. |
Lietojumprogrammas :
- Dijkstra un Prim algoritmu ieviešana.
- Maksimizēt masīva summu pēc K noliegumiem
Saistītie raksti :
- Java.util.PriorityQueue klase Java valodā
- Ieviesiet PriorityQueue, izmantojot Java komparatoru