logo

Sučelje čekanja u Javi

Sučelje čekanja je dio java.util paket i proširuje Sučelje za prikupljanje . Podaje i obrađuje podatke u redoslijedu gdje se elementi dodaju straga i uklanjaju s prednje strane.

Ključne značajke

  • FIFO red: Elementi se obrađuju redoslijedom koji su umetnuti (prvi u prvom mjestu).
  • Nema slučajnog pristupa: Za razliku od elemenata popisa ne može se pristupiti izravno indeksom.
  • Više varijanti: Uključuje implementacije Priorityqueue Deque ArrayDeque i LinkedList.
  • Dva skupa metoda: Verzije bacanja-exception (dodajte uklanjanje elementa) i sigurne verzije (ponudite anketu zavirivanje).

Izjava sučelja java reda

Sučelje reda proglašeno je:

Red javnog sučelja proširuje kolekciju



Ne možemo izravno instancirati red jer je sučelje. Ovdje možemo koristiti klasu poput LinkedList ili Priorityqueue koja implementira ovo sučelje.

Redred = novi LinkedList();

što je sučelje

Sada ćemo prvo proći kroz jednostavan primjer, tada ćemo duboko zaroniti u članak.

Primjer: Osnovni red pomoću LinkedList

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);  } } 

Izlaz
Queue elements: [] 

Budući da je sučelje, red je potrebna konkretna klasa za deklaraciju, a najčešće su klase Praznik i Povezan list U Javi. Imajte na umu da nijedna od ovih implementacija nije sigurna niti. PriorityBlockingqueue je jedna alternativna implementacija ako je potrebna implementacija sa sigurnošću.

klasa java nizova

Stvaranje predmeta čekanja

Red je sučelje, tako da se objekti ne mogu stvoriti u redu reda. Uvijek nam treba klasa koja proširuje ovaj popis kako bismo stvorili objekt. I također nakon uvođenja Generika U Java 1.5 moguće je ograničiti vrstu objekta koji se može pohraniti u red. Ovaj red sigurnog tipa može se definirati kao:

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

Uobičajene metode

Sučelje čekanja pruža nekoliko metoda za dodavanje uklanjanja i pregleda elemenata u redu. Evo nekih od najčešće korištenih metoda:

  • Dodaj (element) : Dodaje element stražnjem dijelu reda. Ako je red pun, baca iznimku.
  • Ponuda (element): Dodaje element stražnjem dijelu reda. Ako je red pun, vraća se lažno.
  • ukloniti() : Uklanja i vraća element na prednjem dijelu reda. Ako je red prazan, baca iznimku.
  • anketa(): Uklanja i vraća element na prednjem dijelu reda. Ako je red prazan, vraća se nula.
  • element(): Vraća element na prednjem dijelu reda bez uklanjanja. Ako je red prazan, baca iznimku.
  • PEEK () : Vraća element na prednjem dijelu reda bez uklanjanja. Ako je red prazan, vraća se nula.

Primjer 1: Ovaj primjer pokazuje operacije reda.

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);  } } 

Izlaz
Queue: [apple banana cherry] Removed element: apple Queue after removal: [banana cherry] Peeked element: banana Queue after peek: [banana cherry date] 

Primjer 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);  } } 

Izlaz
Elements of queue: [0 1 2 3 4] Removed element:0 [1 2 3 4] Head of queue:1 Size of queue:4 

Klase koje implementiraju sučelje čekanja

1. Prioritet

Priorityqueue klasa omogućuje nam da obrađuju elemente na temelju njihovog prioriteta umjesto uobičajenog FIFO redoslijeda normalnog reda. Korisno je kada se elementima mora postupati u prioritetnim redoslijedom. Evo kako možemo stvoriti red pomoću ove klase.

Primjer:

središnja slika u css-u
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());  } } 

Izlaz
10 10 15 

2. LinkedList

LinkedList je linearna struktura podataka u kojoj se elementi pohranjuju kao zasebni objekti koji sadrže podatke i vezu do sljedećeg elementa. Elementi su povezani pomoću pokazivača koji nisu pohranjeni u kontinuiranoj memoriji. Evo kako možemo stvoriti red pomoću ove klase.

Primjer:

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());  } } 

Izlaz
10 10 20 

3. PriorityBlockingqueue

Priorityblockingqueue je red za blokiranje na nitima, koji naručuje elemente poput Priorityqueue i podržava blokiranje pronalaska. Budući da je neograničen dodavanje elemenata i dalje može propasti ako memorija ponestane. Evo kako stvoriti red pomoću ove klase.

Primjer:

vb i vb mreža
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());  } } 

Izlaz
10 10 15 

Različite operacije na sučelju čekanja koristeći prioritetsku klasu

1 Dodavanje elemenata

Za dodavanje elementa u red možemo koristiti ADD () metoda . Nalog za umetanje nije zadržan u prioritetu. Elementi se pohranjuju na temelju prioritetnog naloga koji se prema zadanim postavkama uzdiže. 

Primjer:

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);  } } 

Izlaz
[For Geeks Geeks] 

2. Uklanjanje elemenata

Za uklanjanje elementa iz reda možemo koristiti Ukloni () metoda. Ako postoji više objekata, uklanja se prva pojava objekta. A Metoda ankete () također se koristi za uklanjanje glave i povratak. 

Primjer:

smtp internetski protokol
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);  } } 

Izlaz
Initial Queue: [For Geeks Geeks] After Remove: [For Geeks] Poll Method: For Final Queue: [Geeks] 

3. Iteracija reda

Postoji više načina za ponavljanje putem reda. Najpoznatiji način je pretvaranje reda u niz i prolazak pomoću za petlju . Red je također ugrađeni iterator koji se može koristiti za ponavljanje kroz red. 

Primjer:

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() + ' ');  }  } } 

Izlaz
For Geeks Geeks 

Metode sučelja reda

Evo cijelog popisa metoda za redsučelje u Javi, zajedno sa svim metodama koje nasljeđuje od prikupljanjaI iteralan.

Metoda

Opis

Boolean Add (e e)Umetni element; baca iznimku ako je puna.
Booleova ponuda (e E)Umetni element; Vraća lažno ako je puna.
E Ukloni ()Uklanja glavu; baca iznimku ako je prazan.
E anketa ()Uklanja glavu; Vraća se nula ako je prazna.
I element ()Dohvaća glavu; baca iznimku ako je prazan.
E Peek ()Dohvaća glavu; Vraća se nula ako je prazna.
Boolean Addall (kolekcijac)Dodaje sve elemente iz druge kolekcije.
void Clear ()Uklanja sve elemente.
Boolean sadrži (objekt O)Provjerava postoji li element.
Boolean sadrži (kolekcijac)Provjerava postoje li svi elementi.
Boolean jednak (objekt O)Uspoređuje s drugom kolekcijom.
int hashcode ()Vraća hash kod.
Boolean isEmpty ()Provjera je li prikupljanje prazna.
Iteratoriterator ()Vraća iterator za elemente.
Boolean Ukloni (objekt O)Uklanja određeni element.
Boolean Removeall (kolekcijac)Uklanja sve odgovarajuće elemente.
Boolean Retaitall (kolekcijac)Čuva samo određene elemente.
Int veličina ()Vraća broj elemenata.
Objekt [] toarray ()Vraća elemente kao niz.
T [] toarray (t [] a)Vraća elemente kao tipkani niz.
Zadani void foreach (potrošačakcijski)Izvodi akciju za svaki element.
Zadani void foreach (potrošačakcijski)Izvodi akciju za svaki element.
zadani spliteratorspliterator ()Vraća splitator.
zadani streamStream ()Vraća sekvencijalni tok.
zadani streamparalelstream ()Vraća paralelni tok.