logo

Java Sırası

Kuyruk, öğeleri diğer herhangi bir veri yapısı gibi, ancak belirli bir şekilde depolamak için kullanılan başka bir tür doğrusal veri yapısıdır. Basit bir ifadeyle kuyruğun, Java programlama dilinde aynı türden elemanları saklayan bir tür veri yapısı olduğunu söyleyebiliriz. Kuyruktaki bileşenler FIFO (İlk Giren, İlk Çıkar) davranışında saklanır. Kuyruk koleksiyonunda iki uç vardır; yani ön ve arka. Sıranın ön ve arka olmak üzere iki ucu vardır.

Aşağıdaki şekil, Java kuyruğunun FIFO (İlk Giren, İlk Çıkar) özelliğini mükemmel bir şekilde açıklamaktadır.

Java Sırası

Önceki görüntüde açıklandığı gibi kuyruğun iki terminali olan, yani başlangıç ​​(ön) ve bitiş (arka) olan doğrusal bir veri yapısı olduğunu görebiliriz. Bileşenler kuyruğun arka ucundan kuyruğa eklenir ve bileşenler kuyruğun ön ucundan çıkarılır.

Kuyruk, bir arayüzdür. Java bu Java.util paketine aittir. Ayrıca Koleksiyon arayüzünü de genişletir.

Java Queue arayüzünün genel gösterimi aşağıda gösterilmiştir:

 public interface Queue extends Collection 

Yukarıda Kuyruğun bir arayüz olduğunu tartıştığımız gibi, dolayısıyla arayüzler başlatılamadığı için kuyruğun da başlatılamayacağını söyleyebiliriz. Bir kullanıcı Java'da Queue arayüzünün işlevselliğini uygulamak istiyorsa, Queue arayüzünü uygulayan bazı katı sınıfların olması zorunludur.

Java programlama dilinde Queue arayüzünü uygulamak için kullanılan iki farklı sınıf vardır. Bu sınıflar şunlardır:

Java Sırası

Java Kuyruğunun Özellikleri

Java Kuyruğu, programlama dünyasındaki en önemli veri yapılarından biri olarak kabul edilebilir. Java Queue, özellikleri nedeniyle çekicidir. Java Queue veri yapısının önemli özellikleri aşağıda verilmiştir:

  • Java Kuyruğu FIFO (İlk Giren İlk Çıkar) yöntemine uyar. Elemanların kuyruğa sondan girildiğini ve önden elendiğini gösterir.
  • Java Kuyruğu arayüzü, Koleksiyon arayüzünün dahil etme, silme vb. gibi tüm kurallarını ve süreçlerini verir.
  • Queue arayüzünü uygulamak için kullanılan iki farklı sınıf vardır. Bu sınıflar LinkedList ve PriorityQueue'dur.
  • Bu ikisinin dışında Queue arayüzünü uygulamak için kullanılan Array Blocking Queue adında bir sınıf daha bulunmaktadır.
  • İki tür kuyruk vardır: Sınırsız kuyruklar ve Sınırlı kuyruklar. Java.util paketinin bir parçası olan Kuyruklar, Sınırsız kuyruklar olarak bilinir ve sınırlı kuyruklar, Java.util.concurrent paketinde bulunan kuyruklardır.
  • Deque veya (çift uçlu kuyruk) aynı zamanda her iki uçtan elemanların dahil edilmesini ve silinmesini taşıyan bir kuyruk türüdür.
  • Deque aynı zamanda iş parçacığı açısından güvenli olarak kabul edilir.
  • Engelleme Kuyrukları aynı zamanda iş parçacığı açısından güvenli olan kuyruk türlerinden biridir. Engelleme Kuyrukları üretici-tüketici sorgularını uygulamak için kullanılır.
  • Engelleme Kuyrukları boş öğeleri desteklemez. Bloklama kuyruklarında null değerlere benzer herhangi bir çalışma denenirse NullPointerException da atılır.

Kuyruğun Uygulanması

Kuyruk uygulamasında kullanılan sınıflar

Kuyruğun işlevlerini uygulamak için kullanılan sınıflar aşağıdaki gibidir:

Kuyruk uygulamasında kullanılan arayüzler

Java arayüzleri aynı zamanda Java kuyruğunun uygulanmasında da kullanılır. Kuyruğun işlevlerini uygulamak için kullanılan arayüzler aşağıdaki gibidir:

Java Sırası
  • Ne hakkında
  • Sırayı Engelleme
  • Deque'i Engelleme
Java Sırası

Java Kuyruk Sınıfı Yöntemleri

Java kuyruğunda çok yaygın olarak kullanılan birçok yöntem vardır. Kuyruk arayüzü ekleme, silme, peek vb. gibi farklı yöntemleri destekler. Java kuyruğunun bazı işlemleri bir istisna oluştururken, bu işlemlerin bazıları program tamamlandığında belirli bir değer döndürür.

Not - Java SE 8'de Java kuyruk koleksiyonunda herhangi bir değişiklik yapılmamıştır. Aşağıda tanımlanan bu yöntemler, Java programlama dilinin sonraki sürümlerinde daha ayrıntılı olarak hazırlanmıştır. Örneğin, Java SE 9.

Java Kuyruğunun farklı yöntemleri aşağıda tanımlanmıştır:

Yöntem Yöntem Prototipi Tanım
eklemek boole ekleme(E e) Kapasite kısıtlamalarını ihlal etmeden e öğesini kuyruğun sonuna (kuyruk) ekler. Başarı durumunda true değerini, kapasite tükenirse IllegalStateException değerini döndürür.
dikizlemek E bakış() Kuyruğun başını (önünü) çıkarmadan döndürür.
eleman E öğesi() Peek () yöntemiyle aynı işlemi gerçekleştirir. Kuyruk boş olduğunda NoSuchElementException atar.
kaldırmak E kaldır() Kuyruğun başını kaldırır ve geri döndürür. Kuyruk boşsa NoSuchElementException atar.
anket E anket() Kuyruğun başını kaldırır ve geri döndürür. Kuyruk boşsa null değerini döndürür.
Teklif Boole teklifi(E e) Kapasite kısıtlamalarını ihlal etmeden yeni e öğesini kuyruğa ekleyin.
boyut int boyut() Kuyruktaki öğelerin boyutunu veya sayısını döndürür.

Java Kuyruk Dizisi Uygulaması

Kuyruk uygulaması yığın uygulaması kadar basit değildir.

Dizileri kullanarak kuyruğu uygulamak için önce n sayıda öğeyi tutan bir dizi bildiririz.

Daha sonra bu kuyrukta yapılacak aşağıdaki işlemleri tanımlıyoruz.

java programı

1) Kuyruğa alma: Kuyruğa bir öğe ekleme işlemi Enqueue'dur (programdaki kuyruk Enqueue işlevi). Arka uca bir eleman eklemek için önce kuyruğun dolu olup olmadığını kontrol etmemiz gerekir. Doluysa öğeyi ekleyemeyiz. Arka ise

2) Kuyruk: Kuyruktan bir öğeyi silme işlemi Dequeue'dur (programdaki kuyruk Dequeue işlevi). Öncelikle kuyruğun boş olup olmadığını kontrol ediyoruz. Kuyruktan çıkarma işleminin çalışması için kuyrukta en az bir öğenin bulunması gerekir.

3) Ön: Bu yöntem kuyruğun ön kısmını döndürür.

4) Ekran: Bu yöntem kuyruğun içinden geçer ve kuyruğun öğelerini görüntüler.

Java Kuyruk Programı

Aşağıdaki Java programı Queue'nun uygulanmasını göstermektedir.

QueueArrayImplementation.java

 class Queue { private static int front, rear, capacity; private static int queue[]; Queue(int size) { front = rear = 0; capacity = size; queue = new int[capacity]; } // insert an element into the queue static void queueEnqueue(int item) { // check if the queue is full if (capacity == rear) { System.out.printf('
Queue is full
'); return; } // insert element at the rear else { queue[rear] = item; rear++; } return; } //remove an element from the queue static void queueDequeue() { // check if queue is empty if (front == rear) { System.out.printf('
Queue is empty
&apos;); return; } // shift elements to the right by one place uptil rear else { for (int i = 0; i <rear 0 4 - 1; i++) { queue[i]="queue[i" + 1]; } set queue[rear] to if (rear < capacity) decrement rear rear--; return; print queue elements static void queuedisplay() int i; (front="=" rear) system.out.printf('queue is empty
'); traverse front and for (i="front;" i rear; system.out.printf(' %d , ', queue[i]); of queuefront() system.out.printf('
front element the queue: %d', queue[front]); public class queuearrayimplementation main(string[] args) create a capacity q="new" queue(4); system.out.println('initial queue:'); q.queuedisplay(); inserting in q.queueenqueue(10); q.queueenqueue(30); q.queueenqueue(50); q.queueenqueue(70); system.out.println('queue after enqueue operation:'); q.queuefront(); insert q.queueenqueue(90); q.queuedequeue(); system.out.printf('
queue two dequeue operations:'); pre> <p> <strong>Output:</strong> </p> <pre> Initial Queue: Queue is Empty Queue after Enqueue Operation: 10 , 30 , 50 , 70 , Front Element of the queue: 10 Queue is full 10 , 30 , 50 , 70 , Queue after two dequeue operations: 50 , 70 , Front Element of the queue: 50 </pre> <h2>Java Queue Linked List Implementation</h2> <p>As we have implemented the Queue data structure using Arrays in the above program, we can also implement the Queue using Linked List.</p> <p>We will implement the same methods enqueue, dequeue, front, and display in this program. The difference is that we will be using the Linked List data structure instead of Array.</p> <p>The below program demonstrates the Linked List implementation of Queue in Java.</p> <p> <strong>QueueLLImplementation.java</strong> </p> <pre> class LinkedListQueue { private Node front, rear; private int queueSize; // queue size //linked list node private class Node { int data; Node next; } //default constructor - initially front &amp; rear are null; size=0; queue is empty public LinkedListQueue() { front = null; rear = null; queueSize = 0; } //check if the queue is empty public boolean isEmpty() { return (queueSize == 0); } //Remove item from the front of the queue. public int dequeue() { int data = front.data; front = front.next; if (isEmpty()) { rear = null; } queueSize--; System.out.println(&apos;Element &apos; + data+ &apos; removed from the queue&apos;); return data; } //Add data at the rear of the queue. public void enqueue(int data) { Node oldRear = rear; rear = new Node(); rear.data = data; rear.next = null; if (isEmpty()) { front = rear; } else { oldRear.next = rear; } queueSize++; System.out.println(&apos;Element &apos; + data+ &apos; added to the queue&apos;); } //print front and rear of the queue public void print_frontRear() { System.out.println(&apos;Front of the queue:&apos; + front.data + &apos; Rear of the queue:&apos; + rear.data); } } class QueueLLImplementation{ public static void main(String a[]){ LinkedListQueue queue = new LinkedListQueue(); queue.enqueue(6); queue.enqueue(3); queue.print_frontRear(); queue.enqueue(12); queue.enqueue(24); queue.dequeue(); queue.dequeue(); queue.enqueue(9); queue.print_frontRear(); } } </pre> <p> <strong>Output:</strong> </p> <pre> Element 6 added to the queue Element 3 added to the queue Front of the queue:6 Rear of the queue:3 Element 12 added to the queue Element 24 added to the queue Element 6 removed from the queue Element 3 removed from the queue Element 9 added to the queue Front of the queue:12 Rear of the queue:9 </pre> <hr></rear>

Java Kuyruğu Bağlantılı Liste Uygulaması

Yukarıdaki programda Queue veri yapısını Arrays kullanarak gerçekleştirdiğimiz gibi, Queue'yu Bağlantılı Liste kullanarak da gerçekleştirebiliriz.

Bu programda aynı yöntemleri enqueue, dequeue, front ve display'de uygulayacağız. Aradaki fark, Dizi yerine Bağlantılı Liste veri yapısını kullanacak olmamızdır.

Aşağıdaki program Java'da Queue'nun Bağlantılı Liste uygulamasını göstermektedir.

QueueLLImplementation.java

 class LinkedListQueue { private Node front, rear; private int queueSize; // queue size //linked list node private class Node { int data; Node next; } //default constructor - initially front &amp; rear are null; size=0; queue is empty public LinkedListQueue() { front = null; rear = null; queueSize = 0; } //check if the queue is empty public boolean isEmpty() { return (queueSize == 0); } //Remove item from the front of the queue. public int dequeue() { int data = front.data; front = front.next; if (isEmpty()) { rear = null; } queueSize--; System.out.println(&apos;Element &apos; + data+ &apos; removed from the queue&apos;); return data; } //Add data at the rear of the queue. public void enqueue(int data) { Node oldRear = rear; rear = new Node(); rear.data = data; rear.next = null; if (isEmpty()) { front = rear; } else { oldRear.next = rear; } queueSize++; System.out.println(&apos;Element &apos; + data+ &apos; added to the queue&apos;); } //print front and rear of the queue public void print_frontRear() { System.out.println(&apos;Front of the queue:&apos; + front.data + &apos; Rear of the queue:&apos; + rear.data); } } class QueueLLImplementation{ public static void main(String a[]){ LinkedListQueue queue = new LinkedListQueue(); queue.enqueue(6); queue.enqueue(3); queue.print_frontRear(); queue.enqueue(12); queue.enqueue(24); queue.dequeue(); queue.dequeue(); queue.enqueue(9); queue.print_frontRear(); } } 

Çıktı:

 Element 6 added to the queue Element 3 added to the queue Front of the queue:6 Rear of the queue:3 Element 12 added to the queue Element 24 added to the queue Element 6 removed from the queue Element 3 removed from the queue Element 9 added to the queue Front of the queue:12 Rear of the queue:9