java priority queue tutorial implementation examples
Ovaj vodič objašnjava Java Prioritetni red i srodne koncepte poput Usporedbenika, Minimalnog i Maksimalnog prioritetnog reda, zajedno s njegovom primjenom s primjerima:
Struktura podataka s prioritetnim redoslijedom poseban je red u kojem su elementi prisutni ne prema FIFO redoslijedu, već prema prirodnim elementima ili bilo kojoj prilagođenoj usporedbi koja se koristi tijekom stvaranja reda.
=> Ovdje pogledajte Vodič za početnike za Java.
Što ćete naučiti:
Redoslijed prioriteta u Javi
U prioritetnom redu, prednji dio reda ima najmanje elemenata prema prirodnom redoslijedu, a stražnji je dio usmjeren na najveći element u redu čekanja.
Primjer reda prioriteta koji se sastoji od brojeva prikazan je u nastavku.
što je opisno programiranje u qtp-u
Dakle, kada se element ukloni iz prethodno prikazanog reda prioriteta, to će biti element s najmanje.
Slično tome, za abecedni red prioriteta razmotrit će se vrijednosti ASCII, a elementi reda poredati prema ASCII vrijednostima.
U nastavku su navedene neke od glavnih karakteristika PriorityQueue:
- PriorityQueue je nevezani red.
- PriorityQueue ne dopušta null vrijednosti.
- Za neusporedive objekte ne možemo stvoriti prioritetni red.
- PriorityQueue nasljeđuje iz klasa kao što su AbstractQueue, AbstractCollection, Collection i Object.
- Glava ili prednja strana reda sadrži najmanje elemenata prema prirodnom redoslijedu.
- Implementacija Prioritetnog reda nije sigurna u niti. Stoga, ako želimo sinkronizirani pristup, trebali bismo koristiti PriorityBlockingQueue.
Klasa PriorityQueue nasljeđuje sučelje Java Queue i dio je paketa java.util.
Opća izjava klase PriorityQueue dana je u nastavku:
public class PriorityQueue extends AbstractQueue implements Serializable
Dijagram u nastavku prikazuje hijerarhiju klase za klasu PriorityQueue.
Složenost vremena reda prioriteta
- Složenost vremenskog reda Prioritetnog reda za metode umetanja (stavljanja u red) i brisanja (uklanjanja iz reda) iznosi O (log (n)).
- Prioritetni red ima linearnu vremensku složenost za uklanjanje, kao i sadrži metode.
- Metode koje dohvaćaju elemente reda prioriteta imaju stalnu vremensku složenost.
Primjer reda prioriteta u Javi
Program u nastavku prikazuje jednostavan PriorityQueue u Javi. Stvorimo objekt klase PriorityQueue, dodamo mu vrijednosti, a zatim prikazujemo sadržaj Reda pomoću Iteratora.
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() + ' '); } } }
Izlaz:
Metode API-ja Java Priority Queue
Konstruktori:
Prototip konstruktora | Opis | |
---|---|---|
zaviriti | E zaviriti () | Vraća glavu reda bez brisanja elementa. |
PriorityQueue () | Zadani konstruktor koji stvara objekt PriorityQueue s početnim kapacitetom kao 1. | |
PriorityQueue (Zbirka c) | Stvara objekt PriorityQueue s početnim elementima iz zadane zbirke c. | |
PriorityQueue (int početni kapacitet) | Stvara objekt PriorityQueue s danim ‘InitiCapacity’. Elementi su poredani prema prirodnom redoslijedu. | |
PriorityQueue (int InitialCapacity, komparator za usporedbu) | Stvara objekt PriorityQueue s danim ‘InitiCapacity’. Elementi su poredani prema zadanom usporedniku. | |
PriorityQueue (PriorityQueue c) | Stvara objekt PriorityQueue od drugog objekta PriorityQueue kojeg daje c. | |
PriorityQueue (SortedSet c) | Stvara objekt PriorityQueue iz SortedSet datog od c. |
Metode
Metoda | Prototip metode | Opis |
---|---|---|
dodati | boolean add (E e) | Dodaje element e u PriorityQueue. |
čisto | void clear () | Briše PriorityQueue brisanjem svih elemenata. |
komparator | Usporednikkomparator () | Vraća prilagođenu usporedbu koja se koristi za poredak elemenata u redu čekanja. |
sadrži | boolean sadrži (objekt o) | Provjerava sadrži li PriorityQueue zadani element o. Vraća ako je da. |
iterator | Iteratoriterator () | Metoda za dobivanje iteratora za zadani PriorityQueue. |
ponuda | logička ponuda (E e) | Umetnite zadani element e u PriorityQueue. |
anketa | E anketa () | Uklanja i vraća glavu reda. Vraća nulu ako je red prazan. |
ukloniti | logičko uklanjanje (objekt o) | Uklanja instancu datog elementa o ako je prisutan u redu čekanja. |
veličina | veličina int () | Vraća veličinu ili broj elemenata u ovom PriorityQueue. |
toArray | Objekt [] uArray () | Vraća prikaz niza datog PriorityQueue. |
toArray | T [] doArray (T [] a) | Vraća prikaz niza za zadani prioritetni red s istim tipom vremena izvođenja kao navedeni niz a. |
Implementacija u Javi
Pokažimo gornje metode PriorityQueue pomoću Java programa.
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 Izlaz:
koja vam aplikacija omogućuje preuzimanje youtube videozapisa
Redoslijed prioriteta u Javi 8
Java 8 dodaje još jednu metodu u klasu PriorityQueue, tj. ‘Spliterator ()’.
Pojedinosti ove metode dane su u nastavku.
Naziv metode: spliterator
Prototip metode: javni završni spliterator spliterator ()
Opis metode: Ova metoda stvara spliterator nad elementima PriorityQueue. Ovaj spliterator kasno se veže i brzo otkazuje.
Usporednik prioritetnih redova
Kao što je već spomenuto, elementi PriorityQueue su prirodno poredani. Ako želimo promijeniti redoslijed, trebali bismo odrediti usporednik i koristiti ga tijekom stvaranja objekta PriorityQueue. PriorityQueue zatim koristi ovu usporedbu za poredak njezinih elemenata.
Sljedeći Java program prikazuje upotrebu prilagođene usporedbe za naručivanje elemenata. U ovom programu definiramo novu prilagođenu usporedbu unutar koje nadjačavamo metodu 'uspoređivanja'. Metoda usporedbe koristi se za poredak elemenata PriorityQueue prema duljini.
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() + ' '); } }
Izlaz:
Minimalni red prioriteta u Javi
Prirodni poredak Prioritetnog reda ima najmanji ili najmanji element na čelu reda i stoga je poredak uzlazan. To se naziva „Minimalni red prioriteta“ s rastućim redoslijedom elemenata.
Java program u nastavku prikazuje implementaciju Min Priority Queue u Javi.
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 + ' '); } } }
Izlaz:
Max Priority Red u Javi
Iako red s minimalnim prioritetom ima elemente u uzlaznom redoslijedu, red s maksimalnim prioritetom ima elemente u padajućem redoslijedu, tj. Glava reda s maksimalnim prioritetom vratit će najveći element u redu.
Java program u nastavku prikazuje Max Priority Queue u Javi.
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 Izlaz:
tko je odgovoran za poslovnu vrijednost koju pruža scrum tim?
Kao što je prikazano u gornjem programu, da bismo promijenili prirodni poredak elemenata u redu prioriteta, moramo definirati prilagođenu usporedbu.
Često postavljana pitanja
P # 1) Koji je prioritetni red u Javi?
Odgovor: Posebni red u kojem su svi elementi reda poredani prema prirodnom naručivanju ili korištenjem prilagođene usporedbe naziva se prioritetni red. Ne slijedi FIFO-inu naredbu.
P # 2) Kako postavljate Max Priority red u Javi?
Odgovor: Možemo postaviti Max Priority Queue u Javi pomoću prilagođene usporedbe tako da će glava reda vratiti najveći element u redu.
P # 3) Dopušta li prioritetni red duplikate Java?
Odgovor: Da. Prioritetni red omogućuje dvostruke vrijednosti.
P # 4) Je li redoslijed prioriteta Java maksimalan ili minimalan?
Odgovor: Prema zadanim postavkama, prioritetni red u Javi je min. Prioritetni red s prirodnim redoslijedom. Da bi bio maksimalan, moramo koristiti prilagođenu usporedbu tako da glava reda vraća najveći element u redu.
P # 5) Je li poredani prioritetni red?
Odgovor: Prema zadanim postavkama, glava reda sortirana je, a prioritetni red ima najmanji element kao glavu. Ostatak elemenata poredan je prema potrebi.
Zaključak
Ovim je dovršen vodič o prioritetnim redovima u Javi. Prioritetni red implementira sučelje reda i poseban je red u kojem su elementi poredani prema prirodnom redoslijedu. Ne slijedi FIFO-inu naredbu. Da bismo promijenili prirodni poredak reda prioriteta, možemo koristiti prilagođenu usporedbu.
Prioritetni redovi uglavnom se koriste za raspoređivanje pisača, raspoređivanje CPU zadataka itd. Gomila (minimalna ili maksimalna) također se implementira pomoću Prioritetnih redova.
=> Pročitajte seriju Easy Training Training.
Preporučena literatura
- Struktura podataka prioritetnog reda u C ++ s ilustracijom
- Redoslijed prioriteta u STL-u
- Java Queue - Metode reda, implementacija reda s primjerima
- Struktura podataka kružnog reda C ++: Implementacija i primjene
- Dvostruko završen red (Deque) u C ++ s primjerima
- Struktura podataka u redu čekanja u C ++ s ilustracijom
- Nizovi i redovi u STL-u
- JAVA Tutorial za početnike: 100+ praktičnih Java Video tutorijala