logo

PriorityQueue i Java

En PriorityQueue brukes når objektene skal behandles basert på prioriteten. Det er kjent at a 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.

Queue-Deque-PriorityQueue-In-Java



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

Arbeid av PriorityQueue

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 , 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 brukerinndata
Produksjon

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