Java PriorityQueue

Selles õpetuses õpime näidete abil Java-kogude raamistiku PriorityQueue klassi kohta.

PriorityQueueKlassi pakub funktsionaalsust hunnik andmestruktuur.

See rakendab Queue liidest.

Erinevalt tavalistest järjekordadest leitakse prioriteetsed järjekorraelemendid järjestatud järjekorras.

Oletame, et me tahame elemente tuua kasvavas järjekorras. Sellisel juhul on prioriteetse järjekorra juht kõige väiksem element. Kui see element on leitud, on järjekorra peamiseks järgmiseks väikseimaks elemendiks.

Oluline on märkida, et prioriteetse järjekorra elemente ei pruugi sortida. Kuid elemendid leitakse alati järjestatud järjekorras.

PriorityQueue'i loomine

Prioriteetse järjekorra loomiseks peame java.util.PriorityQueuepaketi importima . Kui pakett on imporditud, saate Java-s prioriteetse järjekorra luua järgmiselt.

 PriorityQueue numbers = new PriorityQueue(); 

Siin oleme loonud prioriteedijärjekorra ilma argumentideta. Sellisel juhul on prioriteetse järjekorra juht järjekorra väikseim element. Ja elemendid eemaldatakse järjekorrast kasvavas järjekorras.

ComparatorLiidese abil saame aga elementide järjestust kohandada . Selle kohta õpime hiljem selles õpetuses.

PriorityQueue meetodid

PriorityQueueKlassi annab rakendada kõiki meetodeid olemas Queueliides.

Sisestage elemendid PriorityQueue'i

  • add()- Lisab määratud elemendi järjekorda. Kui järjekord on täis, loob see erandi.
  • offer()- Lisab määratud elemendi järjekorda. Kui järjekord on täis, naaseb see false.

Näiteks,

 import java.util.PriorityQueue; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue numbers = new PriorityQueue(); // Using the add() method numbers.add(4); numbers.add(2); System.out.println("PriorityQueue: " + numbers); // Using the offer() method numbers.offer(1); System.out.println("Updated PriorityQueue: " + numbers); ) ) 

Väljund

 PriorityQueue: (2, 4) Värskendatud PriorityQueue: (1, 4, 2) 

Siin oleme loonud prioriteetsed järjekorrad nimedega. Oleme lisanud järjekorda 4 ja 2.

Kuigi 4 on sisestatud enne 2, on järjekorra pea 2. Selle põhjuseks on asjaolu, et prioriteetse järjekorra juht on järjekorra väikseim element.

Seejärel oleme sisestanud 1 järjekorda. Järjekord on nüüd ümber korraldatud, et kõige väiksem element 1 salvestada järjekorra ette.

Juurdepääs PriorityQueue'i elementidele

Prioriteetsest järjekorrast elementidele juurde pääsemiseks saame peek()meetodit kasutada . See meetod tagastab järjekorra pea. Näiteks,

 import java.util.PriorityQueue; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue numbers = new PriorityQueue(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.println("PriorityQueue: " + numbers); // Using the peek() method int number = numbers.peek(); System.out.println("Accessed Element: " + number); ) ) 

Väljund

 PriorityQueue: (1, 4, 2) Juurdepääsetav element: 1 

Eemaldage PriorityQueue elemendid

  • remove() - eemaldab määratud elemendi järjekorrast
  • poll() - naaseb ja eemaldab järjekorra pea

Näiteks,

 import java.util.PriorityQueue; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue numbers = new PriorityQueue(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.println("PriorityQueue: " + numbers); // Using the remove() method boolean result = numbers.remove(2); System.out.println("Is the element 2 removed? " + result); // Using the poll() method int number = numbers.poll(); System.out.println("Removed Element Using poll(): " + number); ) ) 

Väljund

PriorityQueue: (1, 4, 2) Kas element 2 on eemaldatud? true Eemaldatud element küsitlust () kasutades: 1

Kordub prioriteetses järjekorras

Prioriteedijärjekorra elementide kordamiseks saame iterator()meetodit kasutada . Selle meetodi kasutamiseks peame java.util.Iteratorpakendi importima . Näiteks,

 import java.util.PriorityQueue; import java.util.Iterator; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue numbers = new PriorityQueue(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.print("PriorityQueue using iterator(): "); //Using the iterator() method Iterator iterate = numbers.iterator(); while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) ) 

Väljund

 Iteraatori () abil PriorityQueue: 1, 4, 2, 

Muud PriorityQueue meetodid

Meetodid Kirjeldused
contains(element) Otsib määratud elemendi prioriteedijärjekorda. Kui element leitakse, siis see naaseb true, kui mitte, siis tagasi false.
size() Tagastab prioriteedijärjekorra pikkuse.
toArray() Teisendab prioriteetse järjekorra massiiviks ja tagastab selle.

PriorityQueue Comparator

Kõigis ülaltoodud näidetes leitakse prioriteetsed järjekorraelemendid loomulikus järjekorras (kasvavas järjekorras). Kuid me saame seda tellimist kohandada.

Selleks peame looma oma Comparatorliidese rakendava võrdlusklassi . Näiteks,

 import java.util.PriorityQueue; import java.util.Comparator; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue numbers = new PriorityQueue(new CustomComparator()); numbers.add(4); numbers.add(2); numbers.add(1); numbers.add(3); System.out.print("PriorityQueue: " + numbers); ) ) class CustomComparator implements Comparator ( @Override public int compare(Integer number1, Integer number2) ( int value = number1.compareTo(number2); // elements are sorted in reverse order if (value> 0) ( return -1; ) else if (value < 0) ( return 1; ) else ( return 0; ) ) ) 

Väljund

 Prioriteedijärjekord: (4, 3, 1, 2) 

Ülaltoodud näites oleme loonud argumendina klassi CustomComparator läbiva prioriteedijärjekorra.

Klass CustomComparator rakendab Comparatorliidest.

Seejärel alistame compare()meetodi. Meetod põhjustab nüüd elemendi pea kõige suurema arvu.

Võrdleja kohta lisateabe saamiseks külastage Java Comparatorit.

Huvitavad Artiklid...