Java

Java Queue(Kuyruk) Kullanımı (Örnek Kod)

Bu yazıda, Java’da Queue(Kuyruk) Nedir, Nasıl Kullanılır, Java Kuyruk Örneği, Java Kuyruk Methodları ve Kuyruk Arayüzü Uygulaması hakkında bilgiler bulacaksınız.

Kuyruk, Java’da öğeleri bir FIFO (İlk Giren İlk Çıkar) düzeninde depolayan doğrusal bir veri yapısı veya bir koleksiyondur.

Kuyruk koleksiyonunun iki ucu vardır, yani ön ve arka. Elemanlar arkadan eklenir ve önden çıkarılır.

Java Queue Nedir?

Bir kuyruk veri yapısı aşağıda gösterildiği gibi temsil edilir:

Yukarıdaki şemada gösterildiği gibi, bir kuyruk, başlangıç (front) ve bitiş (rear) olmak üzere iki noktaya sahip bir yapıdır. Öğeler, arka uçtaki kuyruğa eklenir ve öndeki kuyruktan çıkarılır.

Java’da Queue, java.util paketinin bir parçası olan bir arayüzdür. Kuyruk arabirimi, Java Koleksiyonu arabirimini genişletir.

Kuyruk arabiriminin genel tanımı şöyledir:

Kuyruk bir interface olduğu için somutlaştırılamaz. Queue arabiriminin işlevselliğini uygulamak için bazı somut sınıflara ihtiyacımız var. İki sınıf, Queue arabirimini, yani LinkedList ve PriorityQueue‘yu uygular.

Kuyruk veri yapısının başlıca özelliklerinden bazıları şunlardır:

Kuyruk, FIFO (İlk Giren İlk Çıkar) sırasını takip eder. Bu, elemanın kuyruğa en sonunda eklendiği ve başlangıçta kuyruktan kaldırıldığı anlamına gelir.

  • Java kuyruğu arabirimi, ekleme, silme vb. gibi Koleksiyon arabiriminin tüm yöntemlerini sağlar.
  • LinkedList ve PriorityQueue, Queue arabirimini uygulayan sınıflardır. ArrayBlockingQueue, Queue arabirimini uygulayan başka bir sınıftır.
  • Java.util paketinin bir parçası olan Kuyruklar sınırsız kuyruklar olarak sınıflandırılabilirken, java.util.the eşzamanlı paketinde bulunanlar sınırlı kuyruklar olarak sınıflandırılabilir.
  • Deque, her iki uçtan da ekleme ve silmeyi destekleyen bir kuyruktur.
  • Deque iplik güvenlidir.
  • BlockingQueues iş parçacığı için güvenlidir ve üretici-tüketici sorunlarını uygulamak için kullanılır.
  • BlockingQueues boş öğelere izin vermez. Boş değerlerle ilgili herhangi bir işlem denenirse bir NullPointerException oluşturulur.

Java’da Kuyruk Nasıl Kullanılır?

Java’da bir kuyruk kullanmak için önce kuyruk arayüzünü aşağıdaki gibi içe aktarmalıyız:

yada

Bu içe aktarıldığında, aşağıda gösterildiği gibi bir kuyruk oluşturabiliriz:

Queue bir arabirim olduğundan, bir kuyruk nesnesi oluşturmak için Queue arabirimini uygulayan bir LinkedList sınıfı kullanıyoruz.

Benzer şekilde, diğer somut sınıflarla bir sıra oluşturabiliriz.

Kuyruk nesnesi oluşturulduğuna göre, aşağıda gösterildiği gibi add yöntemiyle değerleri sağlayarak kuyruk nesnesini başlatabiliriz.

Çıktı:

Yukarıdaki örnek, bir Queue nesnesinin bildirilmesini ve başlatılmasını gösterir. Ardından, sadece kuyruğun içeriğini yazdırıyoruz.

Java Queue Metotları

Bu bölümde kuyruk için API yöntemlerini tartışacağız. Kuyruk arabirimi, ekleme, silme, göz atma vb. gibi çeşitli işlemleri destekler. Bazı işlemler bir istisna oluştururken, bazıları yöntem başarılı veya başarısız olduğunda belirli bir değer döndürür.

Java 8’de Queue koleksiyonunda belirli bir değişiklik olmadığını unutmayın. Aşağıdaki yöntemler Java 9 vb. gibi Java’nın sonraki sürümlerinde de mevcuttur.

Aşağıdaki tablo tüm bu yöntemleri özetlemektedir.

MethodMethod PrototipiTanımı
addboolean add(E e)Kapasite kısıtlamalarını ihlal etmeden kuyruğun sonundaki (kuyruktaki) sıraya öğe ekler. Başarı durumunda true veya kapasite tükendiyse IllegalStateException döndürür.
peekE peek()Kuyruğun başını (ön) kaldırmadan döndürür.
elementE element()peek() yöntemiyle aynı işlemi gerçekleştirir. Sıra boş olduğunda NoSuchElementException atar.
removeE remove()Kuyruğun başını kaldırır ve geri döndürür. Kuyruk boşsa NoSuchElementException atar.
pollE poll()Kuyruğun başını kaldırır ve geri döndürür. Kuyruk boşsa, null döndürür.
offerboolean offer(E e)Kapasite kısıtlamalarını ihlal etmeden yeni e öğesini kuyruğa ekleyin.
sizeint size()
Kuyruktaki öğelerin boyutunu veya sayısını döndürür.

Kuyruk Öğelerini Yineleme

Kuyruk öğelerini forEach döngüsünü kullanarak veya bir yineleyici kullanarak geçebiliriz. Aşağıda verilen program, Kuyruğu geçmek için her iki yaklaşımı da uygular.

Çıktı:

Java Queue Uygulaması

Aşağıdaki program, yukarıda açıkladığım metotları göstermektedir.

Çıktı:

Java Queue Dizisi Uygulaması

Queue uygulaması, yığın uygulaması kadar basit değildir. Her şeyden önce, kuyruk arka ve ön olmak üzere iki işaretçi içerir. Ayrıca iki farklı uçta farklı işlemler yapılır.

Dizileri kullanarak kuyruk uygulamak için önce n sayıda kuyruk elemanı tutacak bir dizi tanımlıyoruz.

Daha sonra bu kuyrukta yapılacak aşağıdaki işlemleri tanımlarız.

Enqueue: Kuyruğa bir öğe eklemek için yapılan bir işlem Enqueue’dur (programda QueueEnqueue işlevi). Arka uca bir eleman eklemek için önce kuyruğun dolu olup olmadığını kontrol etmemiz gerekiyor. Doluysa, öğeyi ekleyemeyiz. Arka < n ise, elemanı kuyruğa ekleriz.

Dequeue: Kuyruktan bir öğeyi silme işlemi Dequeue’dur (programda QueueDequeue işlevi). İlk olarak kuyruğun boş olup olmadığını kontrol ediyoruz. Kuyruktan çıkarma işleminin çalışması için kuyrukta en az bir eleman olması gerekir.

Front: Bu yöntem kuyruğun önünü döndürür.

Display: Bu yöntem kuyruğun üzerinden geçer ve kuyruğun öğelerini görüntüler.

Aşağıdaki Java programı, Queue’nun Array uygulamasını gösterir.

Queue.java

Main.java

Çıktı:

Java Queue Linked List Uygulaması

Yukarıdaki programda Queue veri yapısını Arrays kullanarak uyguladığımız gibi Queue’yu Linked List kullanarak da uygulayabiliriz.

Enqueue, dequeue, front ve display ile aynı yöntemleri bu programda uygulayacağız. Aradaki fark, Array yerine Linked List veri yapısını kullanacağımızdır.

Aşağıdaki program, Java’da Queue’nin Bağlantılı Liste uygulamasını gösterir.

LinkedListQueue.java

Main.java

Çıktı:

Sıkça Sorulan Sorular

1) Java’da Kuyruk Nedir?

Cevap: Java’da Queue, öğelerin FIFO (First In, First Out) sıralamasını izleyen doğrusal sıralı bir veri yapısıdır. Bu, kuyruğa ilk eklenen öğenin kaldırılacak ilk öğe olacağı anlamına gelir. Java’da kuyruk, Koleksiyon arabirimini devralan bir arabirim olarak uygulanır.

2) Bir Kuyruk iş parçacığı için güvenli Java mı?

Cevap: Tüm sıralar iş parçacığı için güvenli değildir, ancak Java’daki BlockingQueues iş parçacığı için güvenlidir.

3) Hangisi daha hızlı – Yığın mı Kuyruk mu?

Cevap: Yığın(Stack) daha hızlıdır. Yığında, elemanlar yalnızca bir uçtan işlenir, dolayısıyla kaydırma gerekmez. Ancak kuyrukta, öğeleri eklemek ve silmek için iki farklı işaretçi olduğundan, öğelerin kaydırılması ve ayarlanması gerekir.

4) Kuyruk Türleri Nelerdir?

Cevap: Kuyruklar aşağıdaki tiplerdendir:

Basit sıra
Dairesel sıra
Öncelik sırası
Çift uçlu kuyruk

5) Kuyruk neden kullanılıyor?

Cevap: Kuyruk veri yapısı senkronizasyon amacıyla kullanılır. Kuyruk ayrıca disk ve CPU zamanlaması için de kullanılır.

Sonuç olarak

Bu yazıda, bildirimler, başlatma uygulaması ve yöntemler gibi ayrıntılarıyla birlikte basit kuyrukları açıkladık. Ayrıca Java’da Queue’nin Array ve LinkedList uygulamasını yaptık.

Yorum Yap

Yorum yapmak için tıklayın