java queue queue methods
Bu Eğitimde, Java'da Sıra Nedir, Nasıl Kullanılır, Java Sırası Örneği, Java Sıra Yöntemleri ve Sıra Arayüzü Uygulaması tartışılacaktır:
Kuyruk, öğeleri bir FIFO (İlk Giren, İlk Çıkar) düzeninde depolayan bir doğrusal veri yapısı veya Java'daki bir koleksiyondur.
Kuyruk koleksiyonunun iki ucu vardır, yani ön ve arka. Elemanlar arkaya eklenir ve önden çıkarılır.
=> Java Eğitim Serisini Herkes İçin Görmek İçin Burayı Ziyaret Edin.
Ne öğreneceksin:
Java Sırası Nedir?
Bir kuyruk veri yapısı aşağıda gösterildiği gibi temsil edilir:
Yukarıdaki diyagramda gösterildiği gibi bir kuyruk, iki noktaya sahip bir yapıdır, yani başlangıç (ön) ve bitiş (arka). Öğeler arka uçtaki kuyruğa yerleştirilir ve öndeki kuyruktan çıkarılır.
Java'da Kuyruk, java.util paketinin bir parçası olan bir arabirimdir. Kuyruk arabirimi, Java Koleksiyonu arabirimini genişletir.
Kuyruk arayüzünün genel tanımı şöyledir:
public interface Queue extends Collection
Kuyruk bir arayüz olduğu için somutlaştırılamaz. Queue arayüzünün işlevselliğini uygulamak için bazı somut sınıflara ihtiyacımız var. İki sınıf, Queue arayüzünü uygular, yani LinkedList ve PriorityQueue.
Aşağıda, Kuyruk veri yapısının temel özelliklerinden bazıları verilmiştir:
- Sıra, FIFO (İlk Giren, İlk Çıkar) sırasını takip eder. Bu, elemanın sonunda kuyruğa eklendiği ve başlangıçta kuyruktan kaldırıldığı anlamına gelir.
- Java kuyruk arabirimi, toplama, silme vb. Gibi tüm Koleksiyon arabirimi yöntemlerini sağlar.
- LinkedList ve PriorityQueue, Queue arayüzünü uygulayan sınıflardır. ArrayBlockingQueue, Queue arayüzünü uygulayan başka bir sınıftır.
- Java.util paketinin bir parçası olan Kuyruklar sınırlanmamış kuyruklar olarak sınıflandırılabilirken, java.util'de bulunan kuyruklar sınırlı kuyruklardır.
- Deque, her iki uçtan ekleme ve silme işlemini destekleyen bir kuyruktur.
- Deque iş parçacığı güvenlidir.
- Bloklama Kuyrukları iş parçacığı açısından güvenlidir ve üretici-tüketici problemlerini uygulamak için kullanılır.
- BlockingQueues, boş öğelere izin vermez. Null 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:
import java.util.queue;
Veya
import java.util.*;
Bu içe aktarıldıktan sonra aşağıda gösterildiği gibi bir kuyruk oluşturabiliriz:
Queue str_queue = new LinkedList ();
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 kuyruk oluşturabiliriz.
Queue str_pqueue = new PriorityQueue (); Queue int_queue = new ArrayDeque ();
Artık kuyruk nesnesi oluşturulduğuna göre, kuyruk nesnesini aşağıda gösterildiği gibi add yöntemi ile ona değerleri sağlayarak başlatabiliriz.
str_queue.add(“one”); str_queue.add(“two”); str_queue.add(“three”);
Java Sırası Örneği
import java.util.*; public class Main { public static void main(String() args) { //declare a Queue Queue str_queue = new LinkedList(); //initialize the queue with values str_queue.add('one'); str_queue.add('two'); str_queue.add('three'); str_queue.add('four'); //print the Queue System.out.println('The Queue contents:' + str_queue); } }
Çıktı:
Kuyruk içeriği: (bir, iki, üç, dört)
Yukarıdaki örnek, bir Queue nesnesinin bildirimini ve başlatılmasını gösterir. Ardından, sıranın içeriğini yazdırırız.
Java'da Kuyruk Yöntemleri
Bu bölümde, kuyruk için API yöntemlerini tartışacağız. Kuyruk arabirimi; ekleme, silme, gözetleme vb. Gibi çeşitli işlemleri destekler. Bazı işlemler bir istisna oluştururken, bazıları yöntem başarılı olduğunda veya başarısız olduğunda belirli bir değer döndürür.
Java 8'deki Kuyruk koleksiyonunda belirli bir değişiklik olmadığını unutmayın. Aşağıdaki yöntemler, Java 9, vb. Gibi sonraki Java sürümlerinde de mevcuttur.
Aşağıdaki tablo tüm bu yöntemleri özetlemektedir.
Yöntem | Yöntem Prototipi | Açıklama |
---|---|---|
boyut | int size () | Kuyruktaki öğelerin boyutunu veya sayısını döndürür. |
Ekle | boole toplamı (E e) | Kapasite kısıtlamalarını ihlal etmeden kuyruğun sonundaki (kuyruk) e öğesini ekler. Başarı durumunda true veya kapasite tükendiyse IllegalStateException döndürür. |
dikizlemek | E gözetleme () | Kuyruğun başını (önünü) çıkarmadan döndürür. |
element | E öğesi () | Peek () yöntemiyle aynı işlemi gerçekleştirir. Sıra boş olduğunda NoSuchElementException atar. |
Kaldır | E kaldır () | Sıranın başını kaldırır ve geri döndürür. Kuyruk boşsa NoSuchElementException atar. |
anket | E anket () | Sıranın başını kaldırır ve geri döndürür. Kuyruk boşsa, boş döndürür. |
Teklif | boole teklifi (E e) | Yeni e öğesini kapasite kısıtlamalarını ihlal etmeden kuyruğa ekleyin. |
Kuyruk Öğelerini Yineleme
Kuyruk elemanlarını ya forEach döngüsünü kullanarak ya da bir yineleyici kullanarak geçebiliriz. Aşağıda verilen program, Kuyruğu geçmek için her iki yaklaşımı da uygular.
import java.util.*; public class Main { public static void main(String() args) { //declare a Queue Queue LL_queue = new LinkedList(); //initialize the Queue LL_queue.add('Value-0'); LL_queue.add('Value-1'); LL_queue.add('Value-2'); LL_queue.add('Value-3'); //traverse the Queue using Iterator System.out.println('The Queue elements through iterator:'); Iterator iterator = LL_queue.iterator(); while(iterator.hasNext()){ String element = (String) iterator.next(); System.out.print(element + ' '); } System.out.println('
The Queue elements using for loop:'); //use new for loop to traverse the Queue for(Object object : LL_queue) { String element = (String) object; System.out.print(element + ' '); } } }
Çıktı:
Yineleyici aracılığıyla Sıra öğeleri:
Değer-0 Değer-1 Değer-2 Değer-3
For döngüsünü kullanan Kuyruk öğeleri:
Değer-0 Değer-1 Değer-2 Değer-3
Java Sırası Uygulaması
Aşağıdaki program, yukarıda tartıştığımız yöntemleri göstermektedir.
import java.util.*; public class Main { public static void main(String() args) { Queue q1 = new LinkedList(); //Add elements to the Queue q1.add(10); q1.add(20); q1.add(30); q1.add(40); q1.add(50); System.out.println('Elements in Queue:'+q1); //remove () method =>removes first element from the queue System.out.println('Element removed from the queue: '+q1.remove()); //element() => returns head of the queue System.out.println('Head of the queue: '+q1.element()); //poll () => removes and returns the head System.out.println('Poll():Returned Head of the queue: '+q1.poll()); //returns head of the queue System.out.println('peek():Head of the queue: '+q1.peek()); //print the contents of the Queue System.out.println('Final Queue:'+q1); } }
Çıktı:
Sıradaki Öğeler: (10, 20, 30, 40, 50)
Sıradan kaldırılan öğe: 10
Sıranın başı: 20
Anket (): Geri Döndü Sıranın başı: 20
peek (): Sıranın başı: 30
Son Sıra: (30, 40, 50)
Java Kuyruk Dizisi Uygulaması
Kuyruk 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ılmaktadır.
Sırayı Arrays kullanarak uygulamak için, önce n sayıda kuyruk elemanını tutacak bir dizi bildiririz.
Daha sonra bu kuyrukta yapılacak aşağıdaki işlemleri tanımlıyoruz.
# 1) Sırala: Kuyruğa bir öğe ekleme işlemi Enqueue'dur (programdaki işlev queueEnqueue). Arka uca bir eleman eklemek için önce kuyruğun dolu olup olmadığını kontrol etmemiz gerekir. Doluysa, öğeyi ekleyemeyiz. Arka ise # 2) Sıradan Çıkarma: Kuyruktan bir öğeyi silme işlemi Dequeue'dur (programdaki queueDequeue işlevi). Önce kuyruğun boş olup olmadığını kontrol ederiz. Kuyruktan çıkarma işleminin çalışması için kuyrukta en az bir öğe olması gerekir. # 3) Ön: Bu yöntem sıranın önünü döndürür. # 4) Ekran: Bu yöntem kuyruğu aşar ve kuyruğun öğelerini görüntüler. Aşağıdaki Java programı, Queue'nun Array uygulamasını göstermektedir. Çıktı: İlk Sıra: Yukarıdaki programda Arrays kullanarak Queue veri yapısını uyguladığımız için, Queue'u Linked List'i kullanarak da uygulayabiliriz. Bu programda aynı enqueue, dequeue, front ve display yöntemlerini uygulayacağız. Fark, Array yerine Linked List veri yapısını kullanacak olmamızdır. Aşağıdaki program, Java'da Queue'nun Bağlantılı Liste uygulamasını göstermektedir. Çıktı: Sıraya öğe 6 eklendi BlockingQueue, Java 1.5'te eklenen bir Arayüzdür ve java.util.concurrent paketi. Bu arayüz, BlockingQueue'nun dolu veya boş olması durumunda engelleme sağlar. Böylece, bir iş parçacığı kuyruğa eriştiğinde ve bir kuyruğa zaten dolu olan öğeleri eklemeye (sıraya koymaya) çalıştığında, başka bir iş parçacığı kuyrukta bir boşluk oluşturana kadar (belki kuyruktan çıkarma işlemi veya kuyruğu temizleme ile) engellenir. Benzer şekilde, kuyruktan çıkarma durumunda, sıra, öğe kuyruktan çıkarma işlemi için kullanılabilir olana kadar boşsa işlem engellenir. BlockingQueue yöntemleri, dahili kilitler gibi bir tür eşzamanlılık denetimi kullanır ve atomiktir. BlockingQueue, kuyruk işlemlerini eşzamanlı olarak yöneten eşzamanlı bir kuyruktur. BlockingQueue aşağıda gösterilmiştir: BlockingQueue'nun boş değerleri kabul etmediğini unutmayın. Kuyruğa boş bir değer ekleme girişimi, NullPointerException ile sonuçlanır. Java'da sağlanan BlockingQueue uygulamalarından bazıları LinkedBlockingQueue, PriorityBlockingQueue, ArrayBlockingQueue ve SynchonousQueue'dur. Tüm bu uygulamalar iş parçacığı açısından güvenlidir. Bloklama Kuyrukları iki türdendir: Sınırlı kuyrukta, kuyruğun kapasitesi kuyruğun yapıcısına aktarılır. Kuyruk bildirimi aşağıdaki gibidir: BlockingQueue blockingQueue = new LinkedBlockingDeque (5); Sınırsız kuyrukta, sıranın kapasitesini açık bir şekilde ayarlamıyoruz ve boyutu büyüyebilir. Kapasite Integer.MAX_VALUE olarak ayarlanmıştır. Sınırsız kuyruğun beyanı aşağıdaki gibidir: BlockingQueue blockingQueue = new LinkedBlockingDeque (); BlockingQueue arabirimi, öncelikle üreticinin kaynakları ürettiği ve tüketicinin kaynakları tükettiği üretici-tüketici tipindeki sorunlar için kullanılır. S # 1) Java'da Kuyruk nedir? Cevap: Queue in Java, öğelerin FIFO (İlk Giren İlk Çıkar) sırası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 arayüzünü devralan bir arayüz olarak uygulanır. S # 2) Kuyruk iş parçacığı güvenli Java mı? Cevap: Tüm kuyruklar iş parçacığı açısından güvenli değildir ancak Java'daki BlockingQueues iş parçacığı açısından güvenlidir. S # 3) Hangisi daha hızlı - Yığın mı yoksa Sıra mı? Cevap: Yığın daha hızlı. Yığın halinde, öğeler yalnızca bir uçtan işlenir, bu nedenle herhangi bir kayma gerekmez. Ancak, öğeleri eklemek ve silmek için iki farklı işaretçi olduğundan, kuyrukta öğelerin kaydırılması ve ayarlanması gerekir. S # 4) Kuyruk Türleri Nelerdir? Cevap: Kuyruklar aşağıdaki türlerdendir: S # 5) Sıra neden kullanılıyor? Cevap: Kuyruk veri yapısı, senkronizasyon amacıyla kullanılır. Sıra ayrıca disk ve CPU planlaması için kullanılır. Bu eğiticide, basit kuyrukları bildirimler, başlatma uygulaması ve yöntemler gibi ayrıntılarıyla birlikte tartıştık. Java'da Queue'nun Array ve LinkedList uygulamasını da öğrendik. Yaklaşan eğitimlerimizde, daha fazla sıra türünü ayrıntılı olarak tartışacağız. => TÜM Java Öğreticilerini Buradan Kontrol Edin. 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
'); return; } // shift elements to the right by one place uptil rear else { for (int i = 0; i
Sıra Boş
Kuyruk İşleminden Sonra Kuyruk:
10 = 30 = 50 = 70 =
Sıranın Ön Elemanı: 10
Sıra dolu
10 = 30 = 50 = 70 =
İki kuyruktan çıkarma işleminden sonra sıra: 50 = 70 =
Sıranın Ön Elemanı: 50Java Sırası Bağlantılı Liste Uygulaması
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 & 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('Element ' + data+ ' removed from the queue'); 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('Element ' + data+ ' added to the queue'); } //print front and rear of the queue public void print_frontRear() { System.out.println('Front of the queue:' + front.data + ' Rear of the queue:' + rear.data); } } class Main{ 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(); } }
Sıraya 3. öğe eklendi
Sıranın ön tarafı: 6 Sıranın arkası: 3
Sıraya öğe 12 eklendi
Sıraya 24 numaralı öğe eklendi
6. öğe kuyruktan kaldırıldı
3. öğe kuyruktan kaldırıldı
Sıraya öğe 9 eklendi
Sıranın ön tarafı: 12 Sıranın arkası: 9Java'da BlockingQueue
Bloklama Kuyruk Türleri
Sınırlı Sıra
ana c ++ 'ya tanımsız başvuru
Sınırsız Sıra
Sıkça Sorulan Sorular
Sonuç
Önerilen Kaynaklar