Jan 1, 0001  

title: Java Dersleri 14 - Koleksiyon API (Collection API) Kuyruklar (Queue) link: http://orhanbalci.net/tr/?p=663 author: Orhan Balci description: post_id: 663 created: 2010/02/19 14:49:36 created_gmt: 2010/02/19 11:49:36 comment_status: open post_name: java-dersleri-14-koleksiyon-api-kuyruk-queue status: publish post_type: post

Java Dersleri 14 - Koleksiyon API (Collection API) Kuyruklar (Queue)

[caption id=“attachment_837” align=“aligncenter” width=“600” caption=“Java Dersleri 14 Kuyruklar”]Java Dersleri 14 Kuyruklar[/caption] Koleksiyon API’sine ait diğer bir arayüz kuyruk (queue) arayüzüdür. Temel olarak listeye benzemekle birlikte listelerden farkı elemanlarını farklı bir şekilde sıralamasıdır. Kuyruk her zaman olmamakla birlike elemanlarını FIFO (ilk giren ilk çıkar) mantığıyla dizerler. Bunun farklı olduğu durumlar da mevcuttur. Örneğin PriorityQueue (Öncelik Kuyruğu) içindeki elemanları neye göre karşılaştıracağını kullanıcıya sorar. Eğer kullanıcı tarafından bir karşılaştırma yöntemi belirtilmezse doğal sıralama yöntemlerini kullanır. Örneklerle kuyruk arayüzünü tanıyalım : [java] Queue q = new LinkedList(); for (int i = 0; i < 10; i++) { q.offer(String.valueOf(i)); } for (int i = 0; i < 10; i++) { System.out.println(q.poll()); } [/java] Bu örnekte bir kuyruk yapısına String olarak 0’dan 10’a kadar olan sayılar önce eklenmiş daha sonra eklendiği sırada çıkarılmıştır. Kuyruğa eleman eklemek için offer() metodunu kullanıyoruz. Aynı iş için add() metodu da mevcuttur. Farkları ise ekleme işlemi başarısız olduğu zaman offer() metodu null değeri dönerken add() metodu istisnai durum fırlatır. Kuyruğun başındaki elemanın değerini alarak kuyruktan kaldırmak için ise poll() metodunu kullanıyoruz. offer() metodunda olduğu gibi poll() metodu için de farklı bir versiyon olan remove() metodu bulunur. Farkları yine başarısız olma durumundaki davranışlarıdır. Kuyruk veri yapısından sıradaki elemana ulaşmak için peek() metodu kullanılır. Bu metod sıradaki elemanı kullanıcıya verir fakat kuyruktan silmez. Şimdi de FIFO’dan farklı bir sıralama yöntemiyle çalışan kuyruk örneği yazalım. Yazacağımız örnek kelimeleri içerisindeki sesli harf sayısına göre kuyrukta tutsun. Yani içinde daha fazla sesli harf olan kelime kuyrukta önde yeralsın : [java] PriorityQueue pq = new PriorityQueue(15, new Comparator() { public int compare(Object o1, Object o2) { if ( o1 instanceof String && o2 instanceof String) { String s1 = (String) o1; String s2 = (String) o2; int vowels1 = s1.replaceAll(”[^aeıioöuü]“, “”).length(); int vowels2 = s2.replaceAll(”[^aeıioöuü]“, “”).length(); return vowels2 - vowels1; } return 0; } }); [/java] Örneğimizde kullanıcı tarafından tanımlanmı isimsiz bir Comparator nesnesini kullanarak bir PriorityQueue oluşturuyoruz. Comparator nesnemiz iki String’i içindeki sesli harf sayısına göre karşılaştırmaya yarıyor. Sesli harf sayısını bulmak için String sınıfının replaceAll() metodunu kullanıyoruz. Bu metod verilen düzenli ifadeyi, ikinci parametresiyle değiştirir. Şimdi oluşturduğumuz PriorityQueue nesnesine elemanlar ekleyelim ve sonucu görelim : [java] pq.offer(“iğne”); pq.offer(“iplik”); pq.offer(“bilgisayar”); pq.offer(“masa”); pq.offer(“sandalye”); while(!pq.isEmpty()) { System.out.println(pq.remove()); } [/java] En çok sesli harf “bilgisayar” kelimesinde olduğu için kuyruğun başında yer alacaktır. Daha sonra sırasıyla “sandalye”, “masa” , “iğne” , “iplik” kelimeleri gelecektir. [ad#Yazi Ici]