Java ile Queue Arayüzü Anlatımı
Herkese merhabalar, bu yazımızda Java programlama dili ile FIFO(First In, First Out) prensibinin programda kullanılabilmesini sağlayan Queue arayüzünden bahsedeceğim.Hadi başlayalım
Queue Interface nedir ?
Queue arayüzü java programlama dilinde Collections arayüzünden türetilen ve verileri işlem kuyruğunda işlenilmek üzere tutmaya yarayan bir yapıdır. Queue yapısı kullanılarak listeye eklenen elemanlar listenin en sonuna eklenir ve silinenler listenin başından silinirler. Bu sayede listeye ilk giren, ilk çıkar prensibi uygulanır ve işlem kuyruğu için veriler sıralı tutulmuş olunur.
Java programlama dilinde Queue bir arayüz olduğu için direk olarak nesnesi oluşturulamaz ve, başlatılabilmeleri için bir sınıfa ihtiyaç duyarlar. Queue sınıfı başlatabilmek için ProrityQueue, Linkedlist ve PriorityBlockingQueue sınıfları kullanılmaktadır. Aynı zamanda Collection'dan türetildiği için Collection a ait bütün metodlar Queue içerisindede bulunmaktadır.
Not : PriorityBlockingQueue threadsafe olduğu için multithread uygulamalarda kullanımı daha efektiftir. Bu sayede aynı anda erişimi düzenleyerek sistemin hata vermesi engellenmektedir. Diğer ProrityQueue ve Linkedlist sınıfları single thread uygulamada kullanılabilirler.
Queue<E> myQueue= new Linkedlist<E>();
import java.util.Queue;
import java.util.LinkedList;
add metodu ile Queue koleksiyonuna elemanları ekliyoruz. size metodu ile o anda Queue içerisinde kaç tane elemanın olduğu bulunabilmektedir.
public static void addMethod() {
Queue<String> theQueue = new LinkedList<>();
theQueue.add("Burak");
theQueue.add("Hamdi");
theQueue.add("TUFAN");
theQueue.add("The");
theQueue.add("Code");
theQueue.add("Program");
System.out.println(theQueue);
int count = theQueue.size();
System.out.println("Eleman sayısı : " + count );
}
Program çıktısı aşağıdaki gibi olacaktır:
[Burak, Hamdi, TUFAN, The, Code, Program]
Eleman sayısı : 6
remove metodu ileelemanları Queue içerisinden sırası ile silabilmekteyiz. Program çıktısında görebildiğiniz üzere Queue listesine ilk eklenen eleman ilk olarak silinmiş olacaktır. Bu FIFO prensibinin uygulanması ile olmaktadır.
public static void removeMetodu() {
Queue<String> theQueue = new LinkedList<>();
theQueue.add("Burak");
theQueue.add("Hamdi");
theQueue.add("TUFAN");
System.out.println("İlk hali : " + theQueue);
String eleman = theQueue.remove();
System.out.println("Silinen eleman : " + eleman);
System.out.println("Son hali : " + theQueue);
}
Program çıktısı :
İlk hali : [Burak, Hamdi, TUFAN]
Silinen eleman : Burak
Son hali : [Hamdi, TUFAN]
peek komutu ile Queue list içerisinde sıradaki elemanı alabiliriz. peek ile elemanı alırken silemeye gerek yoktur. Remove ile eleman alınırken öncesinde silinmektedir.
Iterator ile ise liste içerisinde sırada eleman varmı diye kontrol edebilmekteyiz. Bu sayede eleman yokken işlem yapmaya çalışmayız.
public static void peekMetodu() {
Queue<String> theQueue = new LinkedList<>();
theQueue.add("Burak");
theQueue.add("Hamdi");
theQueue.add("TUFAN");
String eleman = theQueue.peek();
System.out.println("Sıradaki eleman : " + eleman);
Iterator it = theQueue.iterator();
boolean elemanVarmi = it.hasNext();
theQueue.remove();
eleman = theQueue.peek();
System.out.println("Eleman varmı : " + elemanVarmi +"\nSıradaki eleman : " + eleman);
}
Program çıktısı :
Sıradaki eleman : Burak
Eleman varmı : true
Sıradaki eleman : Hamdi
poll metodu remove gibi çalışır ve sıradaki elemanı getirir ardından elemanı Queue içerisinden kaldırır.
public static void pollMetodu() {
Queue<String> theQueue = new LinkedList<>();
theQueue.add("Burak");
theQueue.add("Hamdi");
theQueue.add("TUFAN");
String eleman = theQueue.poll();
System.out.println("Silinen eleman : " + eleman);
System.out.println("Kuyruk : " + theQueue);
}
Program çıktısı :
Silinen eleman : Burak
Kuyruk : [Hamdi, TUFAN]
Comments