Java PriorityQueue

Ebben az oktatóanyagban példák segítségével megismerhetjük a Java gyűjtemény keretrendszer PriorityQueue osztályát.

Az PriorityQueueosztá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.PriorityQueuecsomagot. 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 Comparatorfelület segítségével testre szabhatjuk . A későbbiekben erről az oktatóanyagról megtudhatjuk.

A PriorityQueue módszerei

Az PriorityQueueosztály biztosítja a Queuefelü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ér false.

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ól
  • poll() - 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.Iteratorcsomagot. 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 Comparatorinterfé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 Comparatorinterfé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.

érdekes cikkek...