Bu eğiticide, örnekler yardımıyla Java koleksiyonları çerçevesinin PriorityQueue sınıfı hakkında bilgi edineceğiz.
PriorityQueue
Sınıf yığın veri yapısının işlevi sağlar.
Queue arayüzünü uygular.
Normal kuyruklardan farklı olarak, öncelik sırası öğeleri sıralı olarak alınır.
Diyelim ki, artan sırayla elemanları geri almak istiyoruz. Bu durumda, öncelik sırasının başı en küçük öğe olacaktır. Bu eleman bir kez alındıktan sonra, bir sonraki en küçük eleman sıranın başı olacaktır.
Bir öncelik kuyruğunun öğelerinin sıralanmayabileceğine dikkat etmek önemlidir. Bununla birlikte, öğeler her zaman sıralı olarak alınır.
PriorityQueue Oluşturma
Öncelik kuyruğu oluşturmak için java.util.PriorityQueue
paketi içe aktarmalıyız . Paketi içe aktardıktan sonra, Java'da bir öncelik kuyruğunu nasıl oluşturabileceğimiz aşağıda açıklanmıştır.
PriorityQueue numbers = new PriorityQueue();
Burada herhangi bir argüman içermeyen bir öncelik kuyruğu oluşturduk. Bu durumda, öncelik sırasının başı, sıranın en küçük öğesidir. Ve elemanlar kuyruktan artan sırada kaldırılır.
Ancak, Comparator
arayüz yardımıyla elemanların sırasını özelleştirebiliriz . Bunu daha sonra bu eğitimde öğreneceğiz.
PriorityQueue Yöntemleri
PriorityQueue
Sınıf mevcut tüm yöntemlerden uygulamasını sağlar Queue
arayüzüne.
PriorityQueue'ya Eleman Ekle
add()
- Belirtilen öğeyi kuyruğa ekler. Kuyruk doluysa, bir istisna atar.offer()
- Belirtilen öğeyi kuyruğa ekler. Kuyruk doluysa geri dönerfalse
.
Örneğin,
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); ) )
Çıktı
PriorityQueue: (2, 4) Güncellenmiş PriorityQueue: (1, 4, 2)
Burada, numaralar adında bir öncelik kuyruğu oluşturduk. Sıraya 4 ve 2'yi ekledik.
2'den önce 4 eklenmesine rağmen, sıranın başı 2'dir. Bunun nedeni, öncelik sırasının başı sıranın en küçük öğesi olmasıdır.
Daha sonra sıraya 1 ekledik. Sıra, en küçük öğeyi (1) sıranın başına depolamak için şimdi yeniden düzenlenir.
PriorityQueue Öğelerine Erişim
Öncelikli bir kuyruktaki öğelere erişmek için peek()
yöntemi kullanabiliriz . Bu yöntem sıranın başını döndürür. Örneğin,
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); ) )
Çıktı
PriorityQueue: (1, 4, 2) Erişilen Öğe: 1
PriorityQueue Öğelerini Kaldır
remove()
- belirtilen öğeyi kuyruktan kaldırırpoll()
- sıranın başını döndürür ve kaldırır
Örneğin,
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); ) )
Çıktı
PriorityQueue: (1, 4, 2) 2. öğe kaldırıldı mı? true Kaldırılan Öğe Kullanarak anket (): 1
Bir Öncelik Sırasında Yineleme
Bir öncelik kuyruğunun öğeleri üzerinde yinelemek için iterator()
yöntemi kullanabiliriz . Bu yöntemi kullanmak için java.util.Iterator
paketi içe aktarmalıyız . Örneğin,
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(", "); ) ) )
Çıktı
Yineleyici kullanan PriorityQueue (): 1, 4, 2,
Diğer PriorityQueue Yöntemleri
Yöntemler | Açıklamalar |
---|---|
contains(element) | Belirtilen öğe için öncelik sırasını arar. Eleman bulunursa true , değilse geri döner false . |
size() | Öncelik kuyruğunun uzunluğunu döndürür. |
toArray() | Öncelik sırasını bir diziye dönüştürür ve onu döndürür. |
PriorityQueue Karşılaştırıcı
Yukarıdaki tüm örneklerde, öncelik sırası öğeleri doğal sırada (artan sırada) alınır. Ancak bu sıralamayı özelleştirebiliriz.
Bunun için Comparator
arayüzü uygulayan kendi karşılaştırıcı sınıfımızı oluşturmamız gerekiyor . Örneğin,
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; ) ) )
Çıktı
PriorityQueue: (4, 3, 1, 2)
Yukarıdaki örnekte, CustomComparator sınıfını argüman olarak geçiren bir öncelik kuyruğu oluşturduk.
CustomComparator sınıfı Comparator
arabirimi uygular .
Daha sonra compare()
yöntemi geçersiz kılıyoruz . Yöntem artık öğenin başının en büyük sayı olmasına neden olur.
Karşılaştırıcı hakkında daha fazla bilgi edinmek için Java Karşılaştırıcı sayfasını ziyaret edin.