En PriorityQueue bruges, når objekterne formodes at blive behandlet baseret på prioriteten. Det er kendt, at en Kø følger First-In-First-Out-algoritmen, men nogle gange er det nødvendigt, at elementerne i køen behandles i henhold til prioriteringen, det er her, PriorityQueue kommer i spil.
PriorityQueue er baseret på prioritetsbunken. Elementerne i prioritetskøen er ordnet i henhold til den naturlige rækkefølge, eller af en komparator, der stilles til rådighed ved køens opbygningstidspunkt, afhængigt af hvilken konstruktør der anvendes.

I nedenstående prioritetskø vil et element med en maksimal ASCII-værdi have den højeste prioritet.

Erklæring:
public class PriorityQueue extends AbstractQueue implements Serializable where E is the type of elements held in this queue>
Klassen implementerer Serialiserbar , Iterable , Kollektion , Kø grænseflader.
Nogle få vigtige punkter på Priority Queue er som følgende:
- PriorityQueue tillader ikke null.
- Vi kan ikke oprette en PriorityQueue af objekter, der ikke er sammenlignelige
- PriorityQueue er ubundne køer.
- Hovedet i denne kø er det mindste element i forhold til den specificerede bestilling. Hvis flere elementer er bundet for den mindste værdi, er hovedet et af disse elementer - bånd brydes vilkårligt.
- Da PriorityQueue ikke er trådsikker, leverer java PriorityBlockingQueue-klassen, der implementerer BlockingQueue-grænsefladen til brug i et java multithreading-miljø.
- Køhentningsoperationerne poller, fjerner, kig og element får adgang til elementet øverst i køen.
- Det giver O(log(n)) tid til tilføjelses- og pollingsmetoder.
- Det arver metoder fra Abstrakt kø , Abstrakt samling , Kollektion, og Objekt klasse.
Konstruktører:
1. PriorityQueue(): Opretter en PriorityQueue med standardindledende kapacitet (11), der bestiller dens elementer i henhold til deres naturlige rækkefølge.
PriorityQueue pq = new PriorityQueue();
2. PriorityQueue (Samling c): Opretter en PriorityQueue, der indeholder elementerne i den angivne samling.
PriorityQueue pq = ny PriorityQueue(Samling c);
3. PriorityQueue(int initialCapacity) : Opretter en PriorityQueue med den angivne startkapacitet, der ordner dens elementer i henhold til deres naturlige rækkefølge.
PriorityQueue pq = new PriorityQueue(int initialCapacity);
4. PriorityQueue(int initialCapacity, Comparator komparator): Opretter en PriorityQueue med den specificerede startkapacitet, der bestiller dens elementer i henhold til den specificerede komparator.
PriorityQueue pq = new PriorityQueue(int initialCapacity, Comparator komparator);
5. PriorityQueue(PriorityQueue c) : Opretter en PriorityQueue, der indeholder elementerne i den angivne prioritetskø.
PriorityQueue pq = new PriorityQueue(PriorityQueue c);
6. PriorityQueue(SortedSet c) : Opretter en PriorityQueue, der indeholder elementerne i det angivne sorterede sæt.
PriorityQueue pq = new PriorityQueue(SortedSet c);
7. PriorityQueue (Komparator komparator): Opretter en PriorityQueue med standardindledende kapacitet, og hvis elementer er ordnet i henhold til den specificerede komparator.
PriorityQueue pq = new PriorityQueue(Comparator c);
Eksempel:
Eksemplet nedenfor forklarer de følgende grundlæggende handlinger i prioritetskøen.
konverter streng til enum
- boolean add(E element): Denne metode indsætter det angivne element i denne prioritetskø.
- public peek(): Denne metode henter, men fjerner ikke, hovedet af denne kø eller returnerer null, hvis denne kø er tom.
- public poll(): Denne metode henter og fjerner hovedet af denne kø, eller returnerer null, hvis denne kø 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());> >}> }> |
>
>Produktion
10 10 15>
Operationer på PriorityQueue
Lad os se, hvordan du udfører nogle få ofte brugte operationer på klassen Priority Queue.
1. Tilføjelse af elementer: For at tilføje et element i en prioritetskø kan vi bruge add() metoden. Indsættelsesrækkefølgen bibeholdes ikke i PriorityQueue. Elementerne gemmes baseret på prioritetsrækkefø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);> >}> }> |
>
>Produktion
[0, 1, 1, 1, 2, 1]>
Vi får ikke sorterede elementer ved at udskrive 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);> >}> }> |
>
>Produktion
[For, Geeks, Geeks]>
2. Fjernelse af elementer: For at fjerne et element fra en prioritetskø kan vi bruge metoden remove(). Hvis der er flere sådanne objekter, fjernes den første forekomst af objektet. Bortset fra det, bruges poll() metoden også til at fjerne hovedet 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 brugerinputProduktion
Initial PriorityQueue [For, Geeks, Geeks] After Remove - [For, Geeks] Poll Method - For Final PriorityQueue - [Geeks]>
3. Adgang til elementerne: Da Queue følger First In First Out-princippet, kan vi kun få adgang til hovedet af køen. For at få adgang til elementer fra en prioritetskø kan vi bruge 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);> >}> }> |
>
>Produktion
PriorityQueue: [For, Geeks, Geeks] Accessed Element: For>
4. Gentagelse af Priority Queue: Der er flere måder at gentage gennem PriorityQueue. Den mest berømte måde er at konvertere køen til arrayet og krydse ved hjælp af for-løkken. Køen har dog også en indbygget iterator, som kan bruges til at iterere gennem 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() +>' '>);> >}> >}> }> |
>
>Produktion
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());> >}> }> |
>
>Produktion
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 realtid:
Priority Queue er en datastruktur, hvor elementer er ordnet efter prioritet, hvor de højest prioriterede elementer vises forrest i køen. Her er nogle eksempler fra den virkelige verden på, hvor prioriterede køer kan bruges:
- Opgaveplanlægning: I operativsystemer bruges prioritetskøer til at planlægge opgaver baseret på deres prioritetsniveauer. For eksempel kan en opgave med høj prioritet som en kritisk systemopdatering planlægges forud for en opgave med lavere prioritet som en sikkerhedskopieringsproces i baggrunden. Skadestue: På et hospitals skadestue triageres patienter baseret på sværhedsgraden af deres tilstand, hvor de i kritisk tilstand behandles først. En prioriteret kø kan bruges til at styre rækkefølgen, hvori patienter tilses af læger og sygeplejersker. Netværksrouting: I computernetværk bruges prioritetskøer til at styre strømmen af datapakker. Pakker med høj prioritet som tale- og videodata kan blive prioriteret frem for data med lavere prioritet som e-mail og filoverførsler. Transport : I trafikstyringssystemer kan prioriterede køer bruges til at styre trafikstrømmen. For eksempel kan udrykningskøretøjer som ambulancer blive prioriteret frem for andre køretøjer for at sikre, at de kan nå deres destination hurtigt. Jobplanlægning: I jobplanlægningssystemer kan prioritetskøer bruges til at styre den rækkefølge, som job udføres i. Job med høj prioritet som f.eks. kritiske systemopdateringer kan planlægges forud for opgaver med lavere prioritet som f.eks. sikkerhedskopiering af data. Online markedspladser : På online markedspladser kan prioriterede køer bruges til at styre leveringen af produkter til kunderne. Højprioriterede ordrer som ekspresforsendelse kan få prioritet frem for standardforsendelsesordrer.
Samlet set er prioritetskøer en nyttig datastruktur til styring af opgaver og ressourcer baseret på deres prioritetsniveauer i forskellige scenarier i den virkelige verden.
Metoder i klassen PriorityQueue
| METODE | BESKRIVELSE |
|---|---|
| tilføje (Og og) | Indsætter det angivne element i denne prioritetskø. |
| klar() | Fjerner alle elementer fra denne prioritetskø. |
| komparator() | Returnerer den komparator, der bruges til at bestille elementerne i denne kø, eller null, hvis denne kø er sorteret i henhold til den naturlige rækkefølge af dens elementer. |
| indeholder?(Objekt o) | Returnerer sand, hvis denne kø indeholder det angivne element. |
| til hver? (Forbrugerhandling) | Udfører den givne handling for hvert element i Iterable, indtil alle elementer er blevet behandlet, eller handlingen kaster en undtagelse. |
| iterator() | Returnerer en iterator over elementerne i denne kø. |
| tilbud? (E e) | Indsætter det angivne element i denne prioritetskø. |
| fjerne? (Objekt o) | Fjerner en enkelt forekomst af det angivne element fra denne kø, hvis det er til stede. |
| fjern alle? (Samling c) | Fjerner alle denne samlings elementer, der også er indeholdt i den angivne samling (valgfri handling). |
| removeIf? (prædikatfilter) | Fjerner alle de elementer i denne samling, der opfylder det givne prædikat. |
| beholdeAlle? (Samling c) | Beholder kun de elementer i denne samling, der er indeholdt i den angivne samling (valgfri handling). |
| splitter() | Opretter en sent-binding og fejl-hurtig Spliterator over elementerne i denne kø. |
| toArray() | Returnerer et array, der indeholder alle elementerne i denne kø. |
| toArray?(T[] a) | Returnerer et array, der indeholder alle elementerne i denne kø; runtime-typen for den returnerede matrix er den for den angivne matrix. |
Metoder erklæret i klassen java.util.AbstractQueue
| METODE | BESKRIVELSE |
|---|---|
| addAll(Samling c) | Tilføjer alle elementerne i den angivne samling til denne kø. |
| element() | Henter, men fjerner ikke, hovedet af denne kø. |
| fjerne() | Henter og fjerner hovedet i denne kø. |
Metoder erklæret i klassen java.util.AbstractCollection
| METODE | BESKRIVELSE |
|---|---|
| indeholder Alle (Samling c) | Returnerer sand, hvis denne samling indeholder alle elementerne i den angivne samling. |
| er tom() | Returnerer sand, hvis denne samling ikke indeholder nogen elementer. |
| toString() | Returnerer en strengrepræsentation af denne samling. |
Metoder erklæret i interface java.util.Collection
| METODE | BESKRIVELSE |
|---|---|
| indeholder Alle (Samling c) | Returnerer sand, hvis denne samling indeholder alle elementerne i den angivne samling. |
| er lig med (Objekt o) | Sammenligner det angivne objekt med denne samling for lighed. |
| hashCode() | Returnerer hash-kodeværdien for denne samling. |
| er tom() | Returnerer sand, hvis denne samling ikke indeholder nogen elementer. |
| parallelStream() | Returnerer en muligvis parallel strøm med denne samling som kilde. |
| størrelse() | Returnerer antallet af elementer i denne samling. |
| strøm() | Returnerer en sekventiel stream med denne samling som kilde. |
| toArray (IntFunction generator) | Returnerer et array, der indeholder alle elementerne i denne samling, ved at bruge den medfølgende generatorfunktion til at allokere det returnerede array. |
Metoder erklæret i interface java.util.Queue
| METODE | BESKRIVELSE |
|---|---|
| kig() | Henter, men fjerner ikke, hovedet af denne kø eller returnerer null, hvis denne kø er tom. |
| afstemning() | Henter og fjerner hovedet af denne kø, eller returnerer null, hvis denne kø er tom. |
Ansøgninger :
- Implementering af Dijkstras og Prims algoritmer.
- Maksimer matrixsummen efter K negationer
relaterede artikler :
- Java.util.PriorityQueue klasse i Java
- Implementer PriorityQueue gennem Comparator i Java