Ebben az oktatóanyagban példák segítségével megismerhetjük a Java gyűjtemény keretrendszer PriorityQueue osztályát.
Az PriorityQueue
osztály biztosítja a halom adatstruktúrájának funkcionalitását.
Megvalósítja a Queue felületet.
A normál várólistákkal ellentétben az elsőbbségi sor elemeket rendezett sorrendben kapjuk meg.
Tegyük fel, hogy az elemeket növekvő sorrendben szeretnénk lekérni. Ebben az esetben a prioritási sor feje lesz a legkisebb elem. Miután ezt az elemet lekérte, a következő legkisebb elem lesz a sor feje.
Fontos megjegyezni, hogy a prioritási sor elemeit nem lehet rendezni. Az elemeket azonban mindig rendezett sorrendben kapjuk meg.
A PriorityQueue létrehozása
Az elsőbbségi sor létrehozásához importálnunk kell a java.util.PriorityQueue
csomagot. A csomag importálása után a következőképpen hozhatunk létre prioritási sort a Java-ban.
PriorityQueue numbers = new PriorityQueue();
Itt minden fontossági sorrendet létrehoztunk minden érv nélkül. Ebben az esetben a prioritási sor feje a sor legkisebb eleme. És az elemeket növekvő sorrendben távolítja el a sorból.
Az elemek sorrendjét azonban a Comparator
felület segítségével testre szabhatjuk . A későbbiekben erről az oktatóanyagról megtudhatjuk.
A PriorityQueue módszerei
Az PriorityQueue
osztály biztosítja a Queue
felületen található összes módszer megvalósítását .
Helyezze be az elemeket a PriorityQueue-ba
add()
- Beszúrja a megadott elemet a sorba. Ha a sor tele van, kivételt vet.offer()
- Beszúrja a megadott elemet a sorba. Ha a sor tele van, akkor visszatérfalse
.
Például,
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); ) )
Kimenet
PriorityQueue: (2, 4) Frissítve PriorityQueue: (1, 4, 2)
Itt létrehoztunk egy számokkal megnevezett prioritási sort. 4-et és 2-t beszúrtunk a sorba.
Noha a 4-et 2 előtt írják be, a sor feje 2. Ennek oka, hogy az elsőbbségi sor feje a sor legkisebb eleme.
Ezután beillesztettünk 1-et a sorba. A várólista most átrendeződik, hogy a legkisebb 1 elemet a sor elején tárolja.
Hozzáférés a PriorityQueue elemekhez
Elemek eléréséhez egy prioritási sorból használhatjuk a peek()
módszert. Ez a módszer a sor fejét adja vissza. Például,
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); ) )
Kimenet
PriorityQueue: (1, 4, 2) Hozzáférhető elem: 1
Távolítsa el a PriorityQueue elemeket
remove()
- eltávolítja a megadott elemet a sorbólpoll()
- visszatér és eltávolítja a sor fejét
Például,
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); ) )
Kimenet
PriorityQueue: (1, 4, 2) Eltávolították a 2. elemet? true Eltávolított elem poll () használatával: 1
Iterálás egy PriorityQueue felett
A prioritási sor elemeinek ismétléséhez használhatjuk a iterator()
módszert. Ennek a módszernek a használatához importálnunk kell a java.util.Iterator
csomagot. Például,
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(", "); ) ) )
Kimenet
PriorityQueue az iterátor () használatával: 1, 4, 2,
Egyéb PriorityQueue módszerek
Mód | Leírások |
---|---|
contains(element) | Megkeresi a megadott elem prioritási sorát. Ha az elem megtalálható, akkor visszatér true , ha nem, akkor visszatér false . |
size() | Visszaadja a prioritási sor hosszát. |
toArray() | A prioritási sorokat tömbökké konvertálja és visszaadja. |
PriorityQueue Comparator
Az összes fenti példában a prioritási sor elemeket a természetes sorrendben (növekvő sorrendben) kapjuk meg. Ezt a rendelést azonban testre szabhatjuk.
Ehhez létre kell hoznunk a saját összehasonlító osztályunkat, amely megvalósítja az Comparator
interfészt. Például,
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; ) ) )
Kimenet
PriorityQueue: (4, 3, 1, 2)
A fenti példában létrehoztunk egy prioritási várólistát, amely argumentumként átadta a CustomComparator osztályt.
A CustomComparator osztály valósítja meg az Comparator
interfészt.
Ezután felülírjuk a compare()
módszert. A módszer most az elem fejét adja a legnagyobb számnak.
Ha többet szeretne megtudni az összehasonlítóról, látogasson el a Java Comparator oldalra.