En PriorityQueue brukes når objektene skal behandles basert på prioriteten. Det er kjent at a Kø følger First-In-First-Out-algoritmen, men noen ganger må elementene i køen behandles i henhold til prioritet, det er da PriorityQueue kommer inn i bildet.
PriorityQueue er basert på prioritetshaugen. Elementene i prioritetskøen er ordnet i henhold til den naturlige rekkefølgen, eller av en komparator levert ved køkonstruksjonstid, avhengig av hvilken konstruktør som brukes.

I prioritetskøen nedenfor vil et element med en maksimal ASCII-verdi ha høyeste prioritet.

Erklæring:
public class PriorityQueue extends AbstractQueue implements Serializable where E is the type of elements held in this queue>
Klassen gjennomfører Serialiserbar , Iterable , Samling , Kø grensesnitt.
Noen viktige punkter på Priority Queue er som følger:
- PriorityQueue tillater ikke null.
- Vi kan ikke opprette en PriorityQueue av objekter som ikke er sammenlignbare
- PriorityQueue er ubundne køer.
- Hodet i denne køen er det minste elementet i forhold til den angitte bestillingen. Hvis flere elementer er knyttet for den minste verdien, er hodet ett av disse elementene - båndene brytes vilkårlig.
- Siden PriorityQueue ikke er trådsikker, gir java PriorityBlockingQueue-klassen som implementerer BlockingQueue-grensesnittet for bruk i et java multithreading-miljø.
- Køhentingsoperasjonene spørre, fjerne, kikke og få tilgang til elementet øverst i køen.
- Det gir O(log(n)) tid for add- og pollingmetoder.
- Det arver metoder fra Abstrakt kø , Abstrakt samling , Samling, og Gjenstand klasse.
Konstruktører:
1. PriorityQueue(): Oppretter en PriorityQueue med standard initialkapasitet (11) som bestiller elementene i henhold til deres naturlige rekkefølge.
PriorityQueue pq = new PriorityQueue();
2. PriorityQueue (Samling c): Oppretter en PriorityQueue som inneholder elementene i den angitte samlingen.
PriorityQueue pq = ny PriorityQueue(Samling c);
3. PriorityQueue(int initialCapacity) : Oppretter en PriorityQueue med den spesifiserte startkapasiteten som bestiller elementene i henhold til deres naturlige rekkefølge.
PriorityQueue pq = ny PriorityQueue(int initialCapacity);
4. PriorityQueue(int initialCapacity, Comparator komparator): Oppretter en PriorityQueue med den angitte startkapasiteten som bestiller elementene i henhold til den spesifiserte komparatoren.
PriorityQueue pq = new PriorityQueue(int initialCapacity, Comparator komparator);
5. PriorityQueue(PriorityQueue c) : Oppretter en PriorityQueue som inneholder elementene i den angitte prioritetskøen.
PriorityQueue pq = new PriorityQueue(PriorityQueue c);
6. PriorityQueue(SortedSet c) : Oppretter en PriorityQueue som inneholder elementene i det spesifiserte sorterte settet.
PriorityQueue pq = new PriorityQueue(SortedSet c);
7. PriorityQueue (komparator komparator): Oppretter en PriorityQueue med standard initialkapasitet og hvis elementer er ordnet i henhold til den spesifiserte komparatoren.
PriorityQueue pq = new PriorityQueue(Comparator c);
Eksempel:
Eksemplet nedenfor forklarer følgende grunnleggende operasjoner for prioritetskøen.
konverter streng til enum
- boolean add(E element): Denne metoden setter inn det spesifiserte elementet i denne prioriterte køen.
- public peek(): Denne metoden henter, men fjerner ikke, hodet til denne køen, eller returnerer null hvis denne køen er tom.
- public poll(): Denne metoden henter og fjerner hodet til denne køen, eller returnerer null hvis denne køen er tom.
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());> >}> }> |
>
>Produksjon
10 10 15>
Operasjoner på PriorityQueue
La oss se hvordan du utfører noen få ofte brukte operasjoner på klassen Priority Queue.
1. Legge til elementer: For å legge til et element i en prioritert kø, kan vi bruke add()-metoden. Innsettingsrekkefølgen beholdes ikke i PriorityQueue. Elementene lagres basert på prioritetsrekkefølgen som er stigende som standard.
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);> >}> }> |
>
>Produksjon
[0, 1, 1, 1, 2, 1]>
Vi vil ikke få sorterte elementer ved å skrive ut 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);> >}> }> |
>
>Produksjon
[For, Geeks, Geeks]>
2. Fjerning av elementer: For å fjerne et element fra en prioritert kø, kan vi bruke metoden remove(). Hvis det er flere slike objekter, fjernes den første forekomsten av objektet. Bortsett fra det, brukes også poll()-metoden for å fjerne hodet og returnere det.
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);> >}> }> |
>
>
java brukerinndataProduksjon
Initial PriorityQueue [For, Geeks, Geeks] After Remove - [For, Geeks] Poll Method - For Final PriorityQueue - [Geeks]>
3. Få tilgang til elementene: Siden Queue følger First In First Out-prinsippet, har vi kun tilgang til lederen av køen. For å få tilgang til elementer fra en prioritert kø, kan vi bruke peek()-metoden.
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);> >}> }> |
>
>Produksjon
PriorityQueue: [For, Geeks, Geeks] Accessed Element: For>
4. Gjenta Priority Queue: Det er flere måter å iterere gjennom PriorityQueue. Den mest kjente måten er å konvertere køen til matrisen og krysse ved å bruke for-løkken. Køen har imidlertid også en innebygd iterator som kan brukes til å iterere gjennom køen.
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() +>' '>);> >}> >}> }> |
>
>Produksjon
For Geeks Geeks>
Eksempel:
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());> >}> }> |
>
>Produksjon
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>
Eksempler i sanntid:
Priority Queue er en datastruktur der elementene er sortert etter prioritet, med de høyest prioriterte elementene som vises foran i køen. Her er noen eksempler fra den virkelige verden på hvor prioriterte køer kan brukes:
- Oppgaveplanlegging : I operativsystemer brukes prioritetskøer til å planlegge oppgaver basert på deres prioritetsnivåer. For eksempel kan en oppgave med høy prioritet som en kritisk systemoppdatering planlegges foran en oppgave med lavere prioritet, som en sikkerhetskopieringsprosess i bakgrunnen. Akuttmottak: På et akuttmottak på sykehus blir pasienter triagert basert på alvorlighetsgraden av tilstanden deres, med de i kritisk tilstand som behandles først. En prioritert kø kan brukes til å administrere rekkefølgen som pasienter blir sett av leger og sykepleiere. Nettverksruting: I datanettverk brukes prioriterte køer for å administrere flyten av datapakker. Høyprioriterte pakker som tale- og videodata kan gis prioritet over data med lavere prioritet som e-post og filoverføringer. Transport : I trafikkstyringssystemer kan prioriterte køer brukes til å styre trafikkflyten. For eksempel kan utrykningskjøretøy som ambulanser bli prioritert fremfor andre kjøretøy for å sikre at de kan nå målet raskt. Jobbplanlegging: I jobbplanleggingssystemer kan prioriterte køer brukes til å administrere rekkefølgen jobbene utføres i. Høyprioriterte jobber som kritiske systemoppdateringer kan planlegges foran jobber med lavere prioritet som sikkerhetskopiering av data. Nettmarkedsplasser : På nettbaserte markedsplasser kan prioriterte køer brukes til å administrere levering av produkter til kunder. Høyprioriterte bestillinger som ekspressfrakt kan gis prioritet over standard fraktbestillinger.
Samlet sett er prioriterte køer en nyttig datastruktur for å administrere oppgaver og ressurser basert på deres prioritetsnivåer i ulike scenarier i den virkelige verden.
Metoder i PriorityQueue-klassen
| METODE | BESKRIVELSE |
|---|---|
| legg til (Og og) | Setter inn det angitte elementet i denne prioritetskøen. |
| klar() | Fjerner alle elementene fra denne prioriterte køen. |
| komparator() | Returnerer komparatoren som brukes til å bestille elementene i denne køen, eller null hvis denne køen er sortert i henhold til den naturlige rekkefølgen av elementene. |
| inneholder?(Objekt o) | Returnerer sann hvis denne køen inneholder det angitte elementet. |
| for hver? (Forbrukerhandling) | Utfører den gitte handlingen for hvert element i Iterable til alle elementene er behandlet eller handlingen gir et unntak. |
| iterator() | Returnerer en iterator over elementene i denne køen. |
| tilbud? (E e) | Setter inn det angitte elementet i denne prioritetskøen. |
| fjerne? (Objekt o) | Fjerner en enkelt forekomst av det spesifiserte elementet fra denne køen, hvis den er til stede. |
| removeAll? (Samling c) | Fjerner alle denne samlingens elementer som også finnes i den angitte samlingen (valgfri operasjon). |
| removeIf?(Predikatfilter) | Fjerner alle elementene i denne samlingen som tilfredsstiller det gitte predikatet. |
| beholdeAlle?(Samling c) | Beholder kun elementene i denne samlingen som finnes i den angitte samlingen (valgfri operasjon). |
| splitter() | Oppretter en sent-binding og feil-rask Spliterator over elementene i denne køen. |
| toArray() | Returnerer en matrise som inneholder alle elementene i denne køen. |
| toArray?(T[] a) | Returnerer en matrise som inneholder alle elementene i denne køen; kjøretidstypen for den returnerte matrisen er den for den angitte matrisen. |
Metoder deklarert i klassen java.util.AbstractQueue
| METODE | BESKRIVELSE |
|---|---|
| addAll(Samling c) | Legger til alle elementene i den angitte samlingen i denne køen. |
| element() | Henter, men fjerner ikke, lederen av denne køen. |
| fjerne() | Henter og fjerner hodet på denne køen. |
Metoder deklarert i klassen java.util.AbstractCollection
| METODE | BESKRIVELSE |
|---|---|
| inneholder Alle (Samling c) | Returnerer sann hvis denne samlingen inneholder alle elementene i den angitte samlingen. |
| er tom() | Returnerer sann hvis denne samlingen ikke inneholder noen elementer. |
| toString() | Returnerer en strengrepresentasjon av denne samlingen. |
Metoder deklarert i grensesnittet java.util.Collection
| METODE | BESKRIVELSE |
|---|---|
| inneholder Alle (Samling c) | Returnerer sann hvis denne samlingen inneholder alle elementene i den angitte samlingen. |
| lik(Objekt o) | Sammenligner det angitte objektet med denne samlingen for likhet. |
| hashkode() | Returnerer hash-kodeverdien for denne samlingen. |
| er tom() | Returnerer sann hvis denne samlingen ikke inneholder noen elementer. |
| parallelStream() | Returnerer en muligens parallell strøm med denne samlingen som kilde. |
| størrelse() | Returnerer antall elementer i denne samlingen. |
| strøm() | Returnerer en sekvensiell strøm med denne samlingen som kilde. |
| toArray (IntFunction generator) | Returnerer en matrise som inneholder alle elementene i denne samlingen, ved å bruke den medfølgende generatorfunksjonen for å allokere den returnerte matrisen. |
Metoder deklarert i grensesnittet java.util.Queue
| METODE | BESKRIVELSE |
|---|---|
| kikke() | Henter, men fjerner ikke, hodet til denne køen, eller returnerer null hvis denne køen er tom. |
| avstemming() | Henter og fjerner hodet på denne køen, eller returnerer null hvis denne køen er tom. |
applikasjoner :
- Implementering av Dijkstras og Prims algoritmer.
- Maksimer matrisesummen etter K negasjoner
relaterte artikler :
- Java.util.PriorityQueue-klassen i Java
- Implementer PriorityQueue gjennom Comparator i Java