Java PriorityQueue

Bu eğiticide, örnekler yardımıyla Java koleksiyonları çerçevesinin PriorityQueue sınıfı hakkında bilgi edineceğiz.

PriorityQueueSı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.PriorityQueuepaketi 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, Comparatorarayüz yardımıyla elemanların sırasını özelleştirebiliriz . Bunu daha sonra bu eğitimde öğreneceğiz.

PriorityQueue Yöntemleri

PriorityQueueSınıf mevcut tüm yöntemlerden uygulamasını sağlar Queuearayü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öner false.

Ö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ır
  • poll() - 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.Iteratorpaketi 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 Comparatorarayü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ı Comparatorarabirimi 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.

Ilginç makaleler...