Selles õpetuses õpime näidete abil Java-kogude raamistiku PriorityQueue klassi kohta.
PriorityQueue
Klassi 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.PriorityQueue
paketi 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.
Comparator
Liidese abil saame aga elementide järjestust kohandada . Selle kohta õpime hiljem selles õpetuses.
PriorityQueue meetodid
PriorityQueue
Klassi annab rakendada kõiki meetodeid olemas Queue
liides.
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 seefalse
.
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ärjekorrastpoll()
- 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.Iterator
pakendi 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 Comparator
liidese 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 Comparator
liidest.
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.