java queue queue methods
W tym samouczku omówimy, czym jest kolejka w Javie, jak z niej korzystać, przykład kolejki w języku Java, metody kolejki w języku Java i implementacja interfejsu kolejki:
Kolejka to liniowa struktura danych lub kolekcja w języku Java, która przechowuje elementy w kolejności FIFO (pierwsze weszło, pierwsze wyszło).
Zbiór kolejek ma dwa końce, tj. Przód i tył. Elementy są dodawane z tyłu i usuwane z przodu.
=> Odwiedź tutaj, aby zobaczyć serię szkoleń Java dla wszystkich.
Czego się nauczysz:
Co to jest kolejka Java?
Struktura danych kolejki jest przedstawiona poniżej:
Jak pokazano na powyższym schemacie, kolejka to struktura mająca dwa punkty, tj. Początek (przód) i koniec (tył). Elementy są wstawiane do kolejki z tyłu i usuwane z kolejki z przodu.
W Javie Queue jest interfejsem będącym częścią pakietu java.util. Interfejs kolejki stanowi rozszerzenie interfejsu kolekcji Java.
rzeczy, które możesz zrobić z c ++
Ogólna definicja interfejsu kolejki to:
public interface Queue extends Collection
Ponieważ kolejka jest interfejsem, nie można jej utworzyć. Potrzebujemy konkretnych klas, aby zaimplementować funkcjonalność interfejsu Queue. Dwie klasy implementują interfejs Queue, tj. LinkedList i PriorityQueue.
Poniżej przedstawiono niektóre z głównych cech struktury danych kolejki:
- Kolejka jest zgodna z kolejnością FIFO (pierwsze weszło, pierwsze wyszło). Oznacza to, że element jest wstawiany do kolejki na końcu i usuwany z kolejki na początku.
- Interfejs kolejki Java udostępnia wszystkie metody interfejsu Collection, takie jak wstawianie, usuwanie itp.
- LinkedList i PriorityQueue to klasy implementujące interfejs Queue. ArrayBlockingQueue to kolejna klasa implementująca interfejs Queue.
- Kolejki, które są częścią pakietu java.util, można sklasyfikować jako kolejki nieograniczone, podczas gdy te obecne w pakiecie java.util.w pakiecie współbieżnym są kolejkami ograniczonymi.
- Deque to kolejka obsługująca wstawianie i usuwanie z obu końców.
- Deque jest bezpieczny dla wątków.
- BlockingQueues są bezpieczne dla wątków i są używane do wdrażania problemów producent-konsument.
- BlockingQueues nie zezwalają na elementy null. NullPointerException jest generowany w przypadku próby wykonania dowolnej operacji związanej z wartościami null.
Jak korzystać z kolejki w Javie?
Aby użyć kolejki w Javie, musimy najpierw zaimportować interfejs kolejki w następujący sposób:
import java.util.queue;
Lub
import java.util.*;
Po zaimportowaniu możemy utworzyć kolejkę, jak pokazano poniżej:
Queue str_queue = new LinkedList ();
Ponieważ Queue jest interfejsem, używamy klasy LinkedList, która implementuje interfejs Queue do tworzenia obiektu kolejki.
Podobnie możemy stworzyć kolejkę z innymi konkretnymi klasami.
Queue str_pqueue = new PriorityQueue (); Queue int_queue = new ArrayDeque ();
Teraz, gdy obiekt kolejki jest utworzony, możemy zainicjować obiekt kolejki, podając mu wartości za pomocą metody add, jak pokazano poniżej.
str_queue.add(“one”); str_queue.add(“two”); str_queue.add(“three”);
Przykład kolejki Java
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); } }
Wynik:
Zawartość kolejki: (jeden, dwa, trzy, cztery)
Powyższy przykład przedstawia deklarację i inicjalizację obiektu Queue. Następnie po prostu drukujemy zawartość kolejki.
Metody kolejkowania w Javie
W tej sekcji omówimy metody API dla kolejki. Interfejs kolejki obsługuje różne operacje, takie jak wstawianie, usuwanie, wgląd, itp. Niektóre operacje zgłaszają wyjątek, a inne zwracają określoną wartość, gdy metoda zakończy się powodzeniem lub niepowodzeniem.
Zauważ, że nie ma konkretnych zmian w kolekcji kolejki w Javie 8. Poniższe metody są również dostępne w nowszych wersjach Java, takich jak Java 9 itp.
Poniższa tabela podsumowuje wszystkie te metody.
metoda | Prototyp metody | Opis |
---|---|---|
rozmiar | rozmiar int () | Zwraca rozmiar lub liczbę elementów w kolejce. |
Dodaj | add boolean (E e) | Dodaje element e do kolejki na końcu (końcu) kolejki bez naruszania ograniczeń pojemności. Zwraca wartość true, jeśli sukces lub IllegalStateException, jeśli pojemność została wyczerpana. |
zerkać | E peek () | Zwraca nagłówek (przód) kolejki bez jej usuwania. |
element | Element E () | Wykonuje tę samą operację, co metoda peek (). Zgłasza NoSuchElementException, gdy kolejka jest pusta. |
usunąć | E usuń () | Usuwa nagłówek kolejki i zwraca ją. Zgłasza NoSuchElementException, jeśli kolejka jest pusta. |
głosowanie | E ankieta () | Usuwa nagłówek kolejki i zwraca ją. Jeśli kolejka jest pusta, zwraca wartość null. |
Oferta | oferta logiczna (E e) | Wstaw nowy element e do kolejki bez naruszania ograniczeń pojemności. |
Iterowanie elementów kolejki
Możemy przechodzić przez elementy kolejki za pomocą pętli forEach lub iteratora. Program podany poniżej implementuje oba podejścia do przechodzenia przez kolejkę.
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 + ' '); } } }
Wynik:
Elementy kolejki za pośrednictwem iteratora:
Wartość-0 Wartość-1 Wartość-2 Wartość-3
Elementy Queue używające pętli for:
Wartość-0 Wartość-1 Wartość-2 Wartość-3
Implementacja kolejki Java
Poniższy program demonstruje metody, które omówiliśmy powyżej.
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); } }
Wynik:
Elementy w kolejce: (10, 20, 30, 40, 50)
Element usunięty z kolejki: 10
Szef kolejki: 20
Poll (): Returned Head of the queue: 20
peek (): Szef kolejki: 30
Ostatnia kolejka: (30, 40, 50)
Implementacja Java Queue Array
Implementacja kolejki nie jest tak prosta, jak implementacja stosu. Przede wszystkim kolejka zawiera dwa wskaźniki, tylną i przednią. Ponadto różne operacje są wykonywane na dwóch różnych końcach.
Aby zaimplementować kolejkę za pomocą Arrays, najpierw deklarujemy tablicę, która będzie zawierać n liczby elementów kolejki.
Następnie definiujemy następujące operacje do wykonania w tej kolejce.
# 1) Dodaj do kolejki: Operacją wstawiania elementu do kolejki jest Enqueue (funkcja queueEnqueue w programie). Aby wstawić element na końcu, musimy najpierw sprawdzić, czy kolejka jest pełna. Jeśli jest pełny, nie możemy wstawić elementu. Jeśli z tyłu # 2) Dequeue: Operacja usunięcia elementu z kolejki to Dequeue (funkcja queueDequeue w programie). Najpierw sprawdzamy, czy kolejka jest pusta. Aby operacja usuwania z kolejki działała, w kolejce musi znajdować się co najmniej jeden element. # 3) Przód: Ta metoda zwraca początek kolejki. # 4) Wyświetlacz: Ta metoda przechodzi przez kolejkę i wyświetla elementy kolejki. Poniższy program Java demonstruje implementację Queue w tablicy. Wynik: Pierwsza kolejka: Ponieważ w powyższym programie zaimplementowaliśmy strukturę danych kolejki przy użyciu tablic, możemy również zaimplementować kolejkę za pomocą listy połączonej. W tym programie zaimplementujemy te same metody: enqueue, dequeue, front i display. Różnica polega na tym, że będziemy używać struktury danych listy połączonej zamiast tablicy. Poniższy program demonstruje implementację listy połączonej kolejki w Javie. Wynik: Element 6 dodany do kolejki BlockingQueue to interfejs dodany w Javie 1.5 i jest częścią java.util.concurrent pakiet. Ten interfejs wprowadza blokowanie w przypadku, gdy BlockingQueue jest pełna lub pusta. Tak więc, gdy wątek uzyskuje dostęp do kolejki i próbuje wstawić (przeszukać do kolejki) elementy w kolejce, która jest już pełna, jest blokowana, dopóki inny wątek nie utworzy spacji w kolejce (może przez operację usunięcia z kolejki lub wyczyszczenie kolejki). Podobnie w przypadku usuwania z kolejki operacja jest blokowana, jeśli kolejka jest pusta, dopóki element nie stanie się dostępny dla operacji usuwania z kolejki. Metody BlockingQueue używają pewnej formy kontroli współbieżności, takiej jak blokady wewnętrzne, i są niepodzielne. BlockingQueue to kolejka współbieżna, która jednocześnie zarządza operacjami kolejki. BlockingQueue pokazano poniżej: Zauważ, że BlockingQueue nie akceptuje wartości null. Próba wstawienia wartości null do kolejki powoduje wyjątek NullPointerException. Niektóre z implementacji BlockingQueue udostępnionych w Javie to LinkedBlockingQueue, PriorityBlockingQueue, ArrayBlockingQueue i SynchonousQueue. Wszystkie te implementacje są bezpieczne dla wątków. BlockingQueues są dwojakiego rodzaju: W kolejce ograniczonej pojemność kolejki jest przekazywana do konstruktora kolejki. Deklaracja kolejki wygląda następująco: BlockingQueue blockingQueue = new LinkedBlockingDeque (5); W nieograniczonej kolejce nie ustalamy wprost pojemności kolejki, a jej rozmiar może się zwiększać. Pojemność jest ustawiona na Integer.MAX_VALUE. Deklaracja kolejki nieograniczonej wygląda następująco: BlockingQueue blockingQueue = new LinkedBlockingDeque (); Interfejs BlockingQueue jest używany przede wszystkim w przypadku problemów typu producent-konsument, w których producent wytwarza zasoby, a konsument zużywa zasoby. Pytanie 1) Co to jest kolejka w Javie? Odpowiedź: Kolejka w Javie to liniowa uporządkowana struktura danych zgodna z kolejnością elementów FIFO (pierwsze weszło, pierwsze wyszło). Oznacza to, że element wstawiony jako pierwszy w kolejce będzie pierwszym elementem do usunięcia. W Javie kolejka jest implementowana jako interfejs, który dziedziczy interfejs Collection. Pytanie nr 2) Czy Java jest bezpieczna dla wątków kolejki? Odpowiedź: Nie wszystkie kolejki są bezpieczne dla wątków, ale BlockingQueues w Javie są bezpieczne dla wątków. Pytanie nr 3) Co jest szybsze - stos czy kolejka? Odpowiedź: Stos jest szybszy. W stosie elementy są przetwarzane tylko z jednego końca, więc nie jest wymagane przesuwanie. Ale w kolejce elementy muszą zostać przesunięte i dostosowane, ponieważ istnieją dwa różne wskaźniki do wstawiania i usuwania elementów. Pytanie 4) Jakie są typy kolejki? Odpowiedź: Są to kolejki następujących typów: Pytanie nr 5) Dlaczego jest używana kolejka? Odpowiedź: Struktura danych kolejki jest używana do celów synchronizacji. Kolejka jest również używana do planowania dysku i procesora. W tym samouczku omówiliśmy proste kolejki wraz z ich szczegółami, takimi jak deklaracje, implementacja inicjalizacji i metody. Dowiedzieliśmy się również o implementacji Queue w języku Java przez Array i LinkedList. W naszych nadchodzących samouczkach szczegółowo omówimy więcej typów kolejek. => Sprawdź WSZYSTKIE samouczki Java tutaj. 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
Kolejka jest pusta
Kolejka po operacji wstawiania do kolejki:
10 = 30 = 50 = 70 =
Przedni element kolejki: 10
Kolejka jest pełna
10 = 30 = 50 = 70 =
Kolejka po dwóch operacjach usunięcia z kolejki: 50 = 70 =
Przedni element kolejki: 50Implementacja listy połączonej z kolejką 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 & 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(); } }
Element 3 dodany do kolejki
Przód kolejki: 6 Tył kolejki: 3
Element 12 dodany do kolejki
Element 24 dodany do kolejki
Element 6 został usunięty z kolejki
Element 3 został usunięty z kolejki
Element 9 dodany do kolejki
Przód kolejki: 12 Tył kolejki: 9BlockingQueue w Javie
BlockingQueue Types
Ograniczona kolejka
Nieograniczona kolejka
Często Zadawane Pytania
Wniosek
rekomendowane lektury