Merhabalar arkadaşlar. Bu yazıda Queue Interface’in implementasyonu olan PriorityQueue sınıfını inceleyeceğiz. Önceki yazıda genel amaçlı olarak Queue Interface’in iki implementasyonu olduğunu söylemiştik: LinkedList ve PriorityQueue. LinkedList üzerinde ArrayList’in bir implementasyonu olarak daha önce durmuştuk. LinkedList Dequeue adındaki bir interface’i uygular ve Dequeue interface’i de aslında Queue interfcaeni kalıtmış bir interfacedir.

[]

[]

(Sebebini bilmediğim bir nedenden ötürü resimler direk okunaklı çıkmamış. Cntrl + Mouse’un scroll tuşu ile yakınlaşma uzaklaşma yaparak resimleri netçe görebilirsiniz.)

PriorityQueue’nun ismi içinde tuttuğu elemanları öncelikli olarak tutmasından gelir. Öncelikten kastımız da PriorityQueue’nun elemanları doğal sırada yada Comparator kullanarak bir sıralamada tutmasından ibarettir. PrioritQueue null eleman olmasına izin vermez. PriorityQueue sınıfının 6 adet yapılandırıcısı bulunmaktadır. Yapılandırıcılar şöyle:

  • PriorityQueue() : Başlangıç kapasitesi 11 olacak şekilde elemanları doğal sırada tutacak bir PriorityQueue nesnesi üretir.
  • PriorityQueue(Collection<? extends E> c) : c collection nesnesinin elemanlarını barındırarak PriorityQueue nesnesi üretir.
  • PriorityQueue(int initialCapacity) : Elemanları doğal sırada tutacak başlangıç kapasitesini bizim belirlediğimiz bir PriorityQueue nesnesi üretir.
  • PriorityQueue(int initialCapacity, Comparator<? super E> comparator) : Elemanların sıralanmasını parametre olarak verilmiş olan comparator nesnesine göre yapacak,başlangıç kapasitesini bizim belirlediğimiz bir PriorityQueue nesnesi üretir.
  • PriorityQueue(PriorityQueue<? extends E> c): Var olan bir PriorityQueue nesnesinin elemanları ile yeni bir PriorityQueue nesnesi üretir.
  • PriorityQueue(SortedSet<? extends E> c): c SortedSet parametresininin elemanları ile yeni bir PriorityQueue nesnesi üretir.

Şimdi bir örnek yapalım.

import java.util.LinkedList;
import java.util.PriorityQueue;

public class PriorityQueueExample {
	
    public static void main (String [] args){
        PriorityQueue<String> priorityQueue = new PriorityQueue<>();
        priorityQueue.add("ilkay");
        priorityQueue.add("adem");
        priorityQueue.add("zahit");

        LinkedList<String> linkedList = new LinkedList<>();
        linkedList.add("ilkay");
        linkedList.add("adem");
        linkedList.add("zahit");
        
        System.err.println(priorityQueue);
        System.err.println("--------");
        System.err.println(linkedList);
        
        System.err.println("--------");
        
        String firstElementWithPeek = priorityQueue.peek();
        System.err.println(firstElementWithPeek);
        
        System.err.println("--------");
        for (int i = 0; i < 5; i++) {
            String object = priorityQueue.poll();
            System.out.println(object);
        }
        /*for (int i = 0; i < 5; i++) {
            String object = priorityQueue.remove();
            System.out.println(object);
        }*/
    }
}

Örneğimizde Queue arabirimini uygulayan LinkedList ve PriorityQueue sınıflarının birer örneğini oluşturduk ve eklemeler yaptık. Akabinde konsola bu iki veri yapısındaki değerleri bastık. Peek metoduna örnek olması açısından firstElementWithPeek nesnesi oluşturduk ve peek metodu ile veri çekip koyduk. Son olarak da poll ve remove metotlarını örnekleyen bir for döngüleri yazdık. Birinci for döngüsünde poll metodu priorityQueue nesnesinde 4 eleman olmasına ve döngü 5 defa çalıştırılmasına rağmen exception fırlatmayacak, null dönecek. İkinci for döngüsünde ise NoSuchElementException hatası alcağız.

Ekran çıktısına bakalım.

[]

Resimde gördüğümüz üzere Priority Queue String tipinde veri tuttuğu için harflerin sıralamasına göre elemanlarını sıraladı. LinkedList ise eklenme sırasına göre tuttu. Ayrıca konsol çıktısında dikkatinizi null olan yerlere de çekmek istiyorum. poll() metodunun exception fırlatmadığından bahsetmiştik, onun yerine null döner. Şimdi 1. for döngüsünü yoruma alıp 2. for döngüsünü çalıştıralım ve konsolda ne oluyor bakalım.

[]

Gördüğünüz gibi remove metodu silecek eleman bulamayınca exception fırlattı.

Bu yazıda temel olarak bir Queue implementasyonu olan PriorityQueue sınıfından bahsettik arkadaşlar. Başka yazıda görüşene kadar sağlıcakla kalın.