logo

Java'da Kuyruk Arayüzü

Kuyruk Arayüzü aşağıdakilerin bir parçasıdır: java.util paketi genişletir ve Koleksiyon arayüzü . Verileri, öğelerin arkadan eklendiği ve önden çıkarıldığı sırayla saklar ve işler.

Temel Özellikler

  • FIFO Siparişi: Öğeler eklendikleri sıraya göre işlenir (İlk Giren İlk Çıkar).
  • Rastgele Erişim Yok : List öğelerinden farklı olarak indeks yoluyla doğrudan erişilemez.
  • Çoklu Varyantlar: PriorityQueue Deque ArrayDeque ve LinkedList uygulamalarını içerir.
  • İki Grup Yöntem: Atar istisna sürümleri (ekle kaldırma öğesi) ve güvenli sürümler (anket özeti sunun).

Java Kuyruk Arayüzü Beyanı

Kuyruk arayüzü şu şekilde bildirilir:

genel arayüz Kuyruk Koleksiyonu genişletir



Bir arayüz olduğu için bir Kuyruğu doğrudan başlatamayız. Burada LinkedList veya PriorityQueue gibi bu arayüzü uygulayan bir sınıf kullanabiliriz.

Sırakuyruk = yeni Bağlantılı Liste();

c'deki dizeler

Şimdi önce basit bir örnek üzerinden gidelim, ardından yazının derinliklerine ineceğiz.

Örnek: LinkedList'i kullanan Temel Kuyruk

Java
import java.util.LinkedList; import java.util.Queue; public class Geeks {    public static void main(String args[])   {  // Create a Queue of Integers using LinkedList  Queue<Integer> q = new LinkedList<>();    System.out.println('Queue elements: ' + q);  } } 

Çıkış
Queue elements: [] 

Bir arayüz olduğundan kuyruğun bildirim için somut bir sınıfa ihtiyacı vardır ve en yaygın sınıflar şunlardır: Prulite kuyruğu Ve Bağlantılı Liste Java'da. Bu uygulamaların hiçbirinin iş parçacığı açısından güvenli olmadığını unutmayın. ÖncelikliEngelleme Sırası iş parçacığı güvenli uygulamaya ihtiyaç duyulursa alternatif bir uygulamadır.

Java'da harita

Kuyruk Nesneleri Oluşturma

Kuyruk bir arayüz olduğundan nesneler kuyruk türünden oluşturulamaz. Bir nesne yaratmak için her zaman bu listeyi genişletecek bir sınıfa ihtiyacımız var. Ve ayrıca tanıtımından sonra Jenerikler Java 1.5'te Kuyrukta saklanabilecek nesne türünü kısıtlamak mümkündür. Bu tür açısından güvenli kuyruk şu şekilde tanımlanabilir:

Java
// Obj is the type of the object to be stored in Queue Queue<Obj> queue = new PriorityQueue<Obj> (); 

Ortak Yöntemler

Kuyruk arayüzü, kuyruğa öğelerin çıkarılması ve incelenmesi için çeşitli yöntemler sağlar. İşte en sık kullanılan yöntemlerden bazıları:

  • ekle(öğe) : Kuyruğun arkasına bir öğe ekler. Kuyruk doluysa bir istisna atar.
  • teklif(öğe): Kuyruğun arkasına bir öğe ekler. Kuyruk doluysa false değerini döndürür.
  • kaldırmak() : Kuyruğun önündeki öğeyi kaldırır ve döndürür. Kuyruk boşsa bir istisna atar.
  • anket(): Kuyruğun önündeki öğeyi kaldırır ve döndürür. Kuyruk boşsa null değerini döndürür.
  • eleman(): Kuyruğun önündeki öğeyi kaldırmadan döndürür. Kuyruk boşsa bir istisna atar.
  • göz at() : Kuyruğun önündeki öğeyi kaldırmadan döndürür. Kuyruk boşsa null değerini döndürür.

Örnek 1: Bu örnekte temel kuyruk işlemleri gösterilmektedir.

Java
import java.util.LinkedList; import java.util.Queue; public class Geeks {  public static void main(String[] args) {  Queue<String> queue = new LinkedList<>();  // add elements to the queue  queue.add('apple');  queue.add('banana');  queue.add('cherry');  System.out.println('Queue: ' + queue);  // remove the element at the front of the queue  String front = queue.remove();  System.out.println('Removed element: ' + front);  // print the updated queue  System.out.println('Queue after removal: ' + queue);  // add another element to the queue  queue.add('date');  // peek at the element at the front of the queue  String peeked = queue.peek();  System.out.println('Peeked element: ' + peeked);  // print the updated queue  System.out.println('Queue after peek: ' + queue);  } } 

Çıkış
Queue: [apple banana cherry] Removed element: apple Queue after removal: [banana cherry] Peeked element: banana Queue after peek: [banana cherry date] 

Örnek 2 :

Java
import java.util.LinkedList; import java.util.Queue; public class Geeks {  public static void main(String[] args){  Queue<Integer> q = new LinkedList<>();  // Adds elements {0 1 2 3 4} to the queue  for (int i = 0; i < 5; i++)  q.add(i);  // Display contents of the queue  System.out.println('Elements of queue: ' + q);  // To remove the head of queue  int removedele = q.remove();    System.out.println('Removed element:'+ removedele);  System.out.println(q);  // To view the head of queue  int head = q.peek();  System.out.println('Head of queue:'+ head);  // Rest all methods of collection interface like size and contains can be used with this implementation.  int size = q.size();  System.out.println('Size of queue:' + size);  } } 

Çıkış
Elements of queue: [0 1 2 3 4] Removed element:0 [1 2 3 4] Head of queue:1 Size of queue:4 

Kuyruk Arayüzünü uygulayan sınıflar

1. öncelik sırası

PriorityQueue sınıfı, normal bir kuyruğun olağan FIFO sırası yerine öğeleri önceliklerine göre işlememize olanak tanır. Öğelerin öncelik sırasına göre ele alınması gerektiğinde kullanışlıdır. Bu sınıfı kullanarak nasıl kuyruk oluşturabileceğimiz aşağıda açıklanmıştır.

Örnek:

Shilpa Shetty
Java
import java.util.*; class Geeks {  public static void main(String args[]){  // Creating empty priority queue  Queue<Integer> pq = new PriorityQueue<Integer>();  // Adding items to the pQueue using add()  pq.add(10);  pq.add(20);  pq.add(15);  // Printing the top element of the PriorityQueue  System.out.println(pq.peek());  // Printing the top element and removing it the PriorityQueue container  System.out.println(pq.poll());  // Printing the top element again  System.out.println(pq.peek());  } } 

Çıkış
10 10 15 

2. Bağlantılı Liste

LinkedList, elemanların her biri veri ve bir sonraki elemana bağlantı içeren ayrı nesneler olarak depolandığı doğrusal bir veri yapısıdır. Öğeler, sürekli bellekte saklanmayan işaretçiler kullanılarak bağlanır. Bu sınıfı kullanarak nasıl kuyruk oluşturabileceğimiz aşağıda açıklanmıştır.

Örnek:

Java
import java.util.*; class Geeks {  public static void main(String args[])  {  // Creating empty LinkedList  Queue<Integer> ll = new LinkedList<Integer>();  // Adding items to the ll using add()  ll.add(10);  ll.add(20);  ll.add(15);  // Printing the top element of the LinkedList  System.out.println(ll.peek());  // Printing the top element and removing it from the LinkedList container  System.out.println(ll.poll());  // Printing the top element again  System.out.println(ll.peek());  } } 

Çıkış
10 10 20 

3. Öncelikli Engelleme Sırası

PriorityBlockingQueue, PriorityQueue gibi öğeleri sıralayan ve engelleme alımını destekleyen, iş parçacığı açısından güvenli, sınırsız bir engelleme kuyruğudur. Sınırsız olduğundan, bellek biterse öğe ekleme işlemi yine de başarısız olabilir. Bu sınıfı kullanarak nasıl kuyruk oluşturacağınız aşağıda açıklanmıştır.

java taraması.sonraki dize

Örnek:

Java
import java.util.concurrent.PriorityBlockingQueue; import java.util.*; class Geeks {  public static void main(String args[])  {  // Creating empty priority blocking queue  Queue<Integer> pbq = new PriorityBlockingQueue<Integer>();  // Adding items to the pbq using add()  pbq.add(10);  pbq.add(20);  pbq.add(15);  // Printing the top element of the PriorityBlockingQueue  System.out.println(pbq.peek());  // Printing the top element and removing it from the PriorityBlockingQueue  System.out.println(pbq.poll());  // Printing the top element again  System.out.println(pbq.peek());  } } 

Çıkış
10 10 15 

PriorityQueue sınıfını kullanarak Kuyruk Arayüzünde Farklı İşlemler

1. Öğe Ekleme

Kuyruğa bir öğe eklemek için şunu kullanabiliriz: add() yöntemi . Ekleme siparişi PriorityQueue'da saklanmaz. Öğeler, varsayılan olarak artan öncelik sırasına göre saklanır. 

Örnek:

Java
import java.util.*; public class Geeks {  public static void main(String args[])  {  Queue<String> pq = new PriorityQueue<>();  pq.add('Geeks');  pq.add('For');  pq.add('Geeks');  System.out.println(pq);  } } 

Çıkış
[For Geeks Geeks] 

2. Elemanların Kaldırılması

Bir öğeyi kuyruktan kaldırmak için şunu kullanabiliriz: kaldır() yöntemi. Birden fazla nesne varsa, nesnenin ilk geçtiği yer kaldırılır. anket() yöntemi aynı zamanda kafayı çıkarıp geri döndürmek için de kullanılır. 

Örnek:

Java
import java.util.*; public class Geeks {  public static void main(String args[])  {  Queue<String> pq = new PriorityQueue<>();  pq.add('Geeks');  pq.add('For');  pq.add('Geeks');  System.out.println('Initial Queue: ' + pq);  pq.remove('Geeks');  System.out.println('After Remove: ' + pq);  System.out.println('Poll Method: ' + pq.poll());  System.out.println('Final Queue: ' + pq);  } } 

Çıkış
Initial Queue: [For Geeks Geeks] After Remove: [For Geeks] Poll Method: For Final Queue: [Geeks] 

3. Kuyruğu Yinelemek

Kuyrukta yineleme yapmanın birden fazla yolu vardır. En ünlü yol, kuyruğu diziye dönüştürmek ve döngü için . Kuyrukta ayrıca kuyrukta yineleme yapmak için kullanılabilecek dahili bir yineleyici bulunur. 

Örnek:

java programlamayı değiştir
Java
import java.util.*; public class Geeks {  public static void main(String args[])  {  Queue<String> pq = new PriorityQueue<>();  pq.add('Geeks');  pq.add('For');  pq.add('Geeks');  Iterator iterator = pq.iterator();  while (iterator.hasNext()) {  System.out.print(iterator.next() + ' ');  }  } } 

Çıkış
For Geeks Geeks 

Kuyruk Arayüzü Yöntemleri

İşte Kuyruk için tam yöntem listesiKoleksiyondan miras aldığı tüm yöntemlerle birlikte Java'daki arayüzve Tekrarlanabilir.

Yöntem

Tanım

boole ekleme(E e)Öğeyi ekler; doluysa istisna atar.
Boole teklifi(E e)Öğeyi ekler; doluysa false değerini döndürür.
E kaldır()Kafayı çıkarır; boşsa istisna atar.
E Anket ()Kafayı çıkarır; boşsa null değerini döndürür.
Ve eleman()Kafayı alır; boşsa istisna atar.
E bakış()Kafayı alır; boşsa null değerini döndürür.
boolean addAll(KoleksiyonC)Başka bir koleksiyondaki tüm öğeleri ekler.
geçersiz temizleme()Tüm öğeleri kaldırır.
boolean içerir(Nesne o)Elemanın mevcut olup olmadığını kontrol eder.
boolean içerirTümü(KoleksiyonC)Tüm öğelerin mevcut olup olmadığını kontrol eder.
boole eşittir (Nesne o)Başka bir koleksiyonla karşılaştırılır.
int hashCode()Hash kodunu döndürür.
boolean isEmpty()Koleksiyonun boş olup olmadığını kontrol eder.
Yineleyiciyineleyici()Öğeler için yineleyiciyi döndürür.
boolean kaldır (Nesne o)Belirli bir öğeyi kaldırır.
boolean RemoveAll(KoleksiyonC)Eşleşen tüm öğeleri kaldırır.
boolean keepAll(KoleksiyonC)Yalnızca belirtilen öğeleri tutar.
int boyut()Öğe sayısını döndürür.
Object[] toArray()Öğeleri dizi olarak döndürür.
T[] toDizi(T[] a)Öğeleri yazılan bir dizi olarak döndürür.
varsayılan void forEach(Tüketiciaksiyon)Her öğe için eylem gerçekleştirir.
varsayılan void forEach(Tüketiciaksiyon)Her öğe için eylem gerçekleştirir.
varsayılan Ayırıcıayırıcı()Bir ayırıcıyı döndürür.
varsayılan Akışaktarım()Sıralı bir akış döndürür.
varsayılan AkışparalelAkış()Paralel bir akış döndürür.