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.
Red
red = 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
Javaimport 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.
Javaimport 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 ::
Javaimport 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-uJava
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:
Javaimport 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žaJava
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:
Javaimport 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 protokolJava
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:
Javaimport 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 red
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 (kolekcija extends E>c) | Dodaje sve elemente iz druge kolekcije. |
| void Clear () | Uklanja sve elemente. |
| Boolean sadrži (objekt O) | Provjerava postoji li element. |
| Boolean sadrži (kolekcija>c) | 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. |
| Iterator | Vraća iterator za elemente. |
| Boolean Ukloni (objekt O) | Uklanja određeni element. |
| Boolean Removeall (kolekcija>c) | Uklanja sve odgovarajuće elemente. |
| Boolean Retaitall (kolekcija>c) | Čuva samo određene elemente. |
| Int veličina () | Vraća broj elemenata. |
| Objekt [] toarray () | Vraća elemente kao niz. |
| Vraća elemente kao tipkani niz. | |
| Zadani void foreach (potrošač super E>akcijski) | Izvodi akciju za svaki element. |
| Zadani void foreach (potrošač super E>akcijski) | Izvodi akciju za svaki element. |
| zadani spliterator | Vraća splitator. |
| zadani stream | Vraća sekvencijalni tok. |
| zadani stream | Vraća paralelni tok. |