Interfejs kolejki jest obecny w java.util pakiet i rozszerza Interfejs kolekcji służy do przechowywania elementów przeznaczonych do przetworzenia w kolejności FIFO (pierwsze weszło, pierwsze wyszło). Jest to uporządkowana lista obiektów, której zastosowanie ogranicza się do wstawiania elementów na końcu listy i usuwania elementów z początku listy, tj. FIFO lub zasadę „pierwsze weszło, pierwsze wyszło”.

Będąc interfejsem, kolejka potrzebuje konkretnej klasy do deklaracji, a najczęstszymi klasami są Kolejka priorytetowa I Połączona lista w Jawie. Należy pamiętać, że żadna z tych implementacji nie jest bezpieczna dla wątków. Kolejka blokowania priorytetów jest jedną z alternatywnych implementacji, jeśli wymagana jest implementacja bezpieczna dla wątków.
Deklaracja: Interfejs kolejki jest zadeklarowany jako:
public interface Queue extends Collection>
Tworzenie obiektów kolejki: Od Kolejka jest interfejs , nie można tworzyć obiektów z kolejki typów. Zawsze potrzebujemy klasy, która rozszerza tę listę, aby utworzyć obiekt. A także po wprowadzeniu Genetyki w Javie 1.5 możliwe jest ograniczenie typu obiektu, który może być przechowywany w kolejce. Tę kolejkę bezpieczną dla typu można zdefiniować jako:
// Obj is the type of the object to be stored in Queue Queue queue = new PriorityQueue ();>
W Javie interfejs kolejki jest podtypem interfejsu kolekcji i reprezentuje zbiór elementów w określonej kolejności. Działa zgodnie z zasadą „pierwsze weszło, pierwsze wyszło” (FIFO), co oznacza, że elementy są pobierane w kolejności, w jakiej zostały dodane do kolejki.
Interfejs kolejki udostępnia kilka metod dodawania, usuwania i sprawdzania elementów w kolejce. Oto niektóre z najczęściej stosowanych metod:
add(element): Dodaje element na koniec kolejki. Jeśli kolejka jest pełna, zgłasza wyjątek.
oferta(element): Dodaje element na końcu kolejki. Jeśli kolejka jest pełna, zwraca wartość false.
usuń(): Usuwa i zwraca element na początku kolejki. Jeśli kolejka jest pusta, zgłasza wyjątek.
poll(): Usuwa i zwraca element na początku kolejki. Jeśli kolejka jest pusta, zwraca wartość null.
element(): Zwraca element na początku kolejki bez jego usuwania. Jeśli kolejka jest pusta, zgłasza wyjątek.
peek(): Zwraca element na początku kolejki bez jego usuwania. Jeśli kolejka jest pusta, zwraca wartość null.
Interfejs Queue jest implementowany przez kilka klas w Javie, w tym LinkedList, ArrayDeque i PriorityQueue. Każda z tych klas zapewnia różne implementacje interfejsu kolejki, z różnymi charakterystykami wydajnościowymi i funkcjami.
Ogólnie rzecz biorąc, interfejs kolejki jest użytecznym narzędziem do zarządzania kolekcjami elementów w określonej kolejności i jest szeroko stosowany w wielu różnych aplikacjach i branżach.
Przykład:
Jawa
import> java.util.LinkedList;> import> java.util.Queue;> public> class> QueueExample {> >public> static> void> main(String[] args) {> >Queue queue =>new> LinkedList();> >// add elements to the queue> >queue.add(>'apple'>);> >queue.add(>'banana'>);> >queue.add(>'cherry'>);> >// print the queue> >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);> >}> }> |
>
>Wyjście
Queue: [apple, banana, cherry] Removed element: apple Queue after removal: [banana, cherry] Peeked element: banana Queue after peek: [banana, cherry, date]>
Przykład: Kolejka
Jawa
// Java program to demonstrate a Queue> import> java.util.LinkedList;> import> java.util.Queue;> public> class> QueueExample {> >public> static> void> main(String[] args)> >{> >Queue 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);> >}> }> |
>
Niezbędna kompilacja Ubuntu
>Wyjście
Elements of queue [0, 1, 2, 3, 4] removed element-0 [1, 2, 3, 4] head of queue-1 Size of queue-4>
Operacje na interfejsie kolejki
Zobaczmy, jak wykonać kilka często używanych operacji w kolejce za pomocą Klasa kolejki priorytetowej .
1. Dodawanie elementów: Aby dodać element do kolejki, możemy skorzystać z metody metoda dodawania(). . Zamówienie wstawiania nie jest zachowywane w kolejce PriorityQueue. Elementy są przechowywane w kolejności priorytetów, która domyślnie jest rosnąca.
Przykład
Jawa
// Java program to add elements> // to a Queue> import> java.util.*;> public> class> GFG {> >public> static> void> main(String args[])> >{> >Queue pq =>new> PriorityQueue();> >pq.add(>'Geeks'>);> >pq.add(>'For'>);> >pq.add(>'Geeks'>);> >System.out.println(pq);> >}> }> |
>
>Wyjście
[For, Geeks, Geeks]>
2. Usuwanie elementów: Aby usunąć element z kolejki, możemy skorzystać z metody metoda usuwania(). Jeżeli takich obiektów jest wiele, to pierwsze wystąpienie obiektu jest usuwane. Oprócz tego metoda poll() służy również do usuwania nagłówka i jego zwracania.
Przykład
Jawa
losowy brak generatora w Javie
// Java program to remove elements> // from a Queue> import> java.util.*;> public> class> GFG {> >public> static> void> main(String args[])> >{> >Queue 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);> >}> }> |
>
>Wyjście
Initial Queue [For, Geeks, Geeks] After Remove [For, Geeks] Poll Method For Final Queue [Geeks]>
3. Iteracja kolejki: Istnieje wiele sposobów iteracji po kolejce. Najbardziej znanym sposobem jest konwersja kolejki na tablicę i przechodzenie za pomocą pętli for. Jednakże kolejka ma również wbudowany iterator, którego można używać do iteracji po kolejce.
Przykład
Jawa
// Java program to iterate elements> // to a Queue> import> java.util.*;> public> class> GFG {> >public> static> void> main(String args[])> >{> >Queue pq =>new> PriorityQueue();> >pq.add(>'Geeks'>);> >pq.add(>'For'>);> >pq.add(>'Geeks'>);> >Iterator iterator = pq.iterator();> >while> (iterator.hasNext()) {> >System.out.print(iterator.next() +>' '>);> >}> >}> }> |
>
>Wyjście
For Geeks Geeks>
Charakterystyka kolejki: Oto cechy kolejki:
- Kolejka służy do wstawiania elementów na końcu kolejki i usuwania z początku kolejki. Jest zgodny z koncepcją FIFO.
- Kolejka Java obsługuje wszystkie metody interfejsu kolekcji, w tym wstawianie, usuwanie itp.
- Połączona lista , ArrayBlockingQueue i Kolejka priorytetowa są najczęściej stosowanymi implementacjami.
- Jeśli na BlockingQueues zostanie wykonana jakakolwiek operacja o wartości null, zostanie zgłoszony wyjątek NullPointerException.
- Kolejki dostępne w pakiecie java.util to kolejki nieograniczone.
- Kolejki dostępne w pakiecie java.util.concurrent to kolejki ograniczone.
- Wszystkie kolejki z wyjątkiem Deques obsługują wstawianie i usuwanie odpowiednio na końcu i na początku kolejki. Wkładanie i wyjmowanie elementu wspierającego Deques na obu końcach.
Klasy implementujące interfejs kolejki:
1. Kolejka priorytetowa: Klasa PriorityQueue zaimplementowana w frameworku kolekcji umożliwia nam przetwarzanie obiektów w oparciu o priorytet. Wiadomo, że kolejka działa zgodnie z algorytmem First-In-First-Out, ale czasami elementy kolejki muszą zostać przetworzone zgodnie z priorytetem i wtedy do gry wchodzi PriorityQueue. Zobaczmy, jak utworzyć obiekt kolejki przy użyciu tej klasy.
Przykład
Jawa
// Java program to demonstrate the> // creation of queue object using the> // PriorityQueue class> import> java.util.*;> class> GfG {> >public> static> void> main(String args[])> >{> >// Creating empty priority queue> >Queue pQueue> >=>new> PriorityQueue();> >// Adding items to the pQueue> >// using add()> >pQueue.add(>10>);> >pQueue.add(>20>);> >pQueue.add(>15>);> >// Printing the top element of> >// the PriorityQueue> >System.out.println(pQueue.peek());> >// Printing the top element and removing it> >// from the PriorityQueue container> >System.out.println(pQueue.poll());> >// Printing the top element again> >System.out.println(pQueue.peek());> >}> }> |
>
>Wyjście
10 10 15>
2. Połączona lista: LinkedList to klasa zaimplementowana w frameworku kolekcji, który z natury implementuje Przykład
Jawa
// Java program to demonstrate the> // creation of queue object using the> // LinkedList class> import> java.util.*;> class> GfG {> >public> static> void> main(String args[])> >{> >// Creating empty LinkedList> >Queue ll> >=>new> LinkedList();> >// 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());> >}> }> |
>
>Wyjście
10 10 20>
3. Kolejka blokowania priorytetów: Należy zauważyć, że obie implementacje, PriorityQueue i LinkedList, nie są bezpieczne dla wątków. PriorityBlockingQueue to jedna z alternatywnych implementacji, jeśli wymagana jest implementacja bezpieczna dla wątków. PriorityBlockingQueue to nieograniczona kolejka blokująca, która używa tych samych reguł porządkowania co klasa Kolejka priorytetowa oraz materiały blokujące operacje odzyskiwania.
Ponieważ jest nieograniczony, dodawanie elementów może czasami zakończyć się niepowodzeniem z powodu wyczerpania zasobów Błąd brak pamięci . Zobaczmy, jak utworzyć obiekt kolejki przy użyciu tej klasy.
Przykład
Jawa
// Java program to demonstrate the> // creation of queue object using the> // PriorityBlockingQueue class> import> java.util.concurrent.PriorityBlockingQueue;> import> java.util.*;> class> GfG {> >public> static> void> main(String args[])> >{> >// Creating empty priority> >// blocking queue> >Queue pbq> >=>new> PriorityBlockingQueue();> >// 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());> >}> }> |
>
>Wyjście
10 10 15>
Metody interfejsu kolejkowego
Interfejs kolejki dziedziczy wszystkie metody obecne w pliku interfejs kolekcji wdrażając następujące metody:
| metoda | Opis Topologia sieci |
|---|---|
| add(int indeks, element) | Ta metoda służy do dodania elementu o określonym indeksie w kolejce. Po przekazaniu pojedynczego parametru po prostu dodaje element na końcu kolejki. |
| addAll(indeks int, kolekcja kolekcji) | Metoda ta służy do dodania do kolejki wszystkich elementów danej kolekcji. Po przekazaniu pojedynczego parametru dodaje wszystkie elementy danej kolekcji na końcu kolejki. |
| rozmiar() | Ta metoda służy do zwracania rozmiaru kolejki. |
| jasne() | Ta metoda służy do usuwania wszystkich elementów z kolejki. Jednakże odniesienie do utworzonej kolejki jest nadal przechowywane. |
| usunąć() | Metoda ta służy do usunięcia elementu z przodu kolejki. |
| usuń(indeks int) | Ta metoda usuwa element z określonego indeksu. Przesuwa kolejne elementy (jeśli występują) w lewo i zmniejsza ich indeksy o 1. |
| usuń (element) | Metoda ta służy do usunięcia i zwrócenia pierwszego wystąpienia danego elementu w kolejce. |
| pobierz (indeks int) | Ta metoda zwraca elementy o określonym indeksie. |
| set(int indeks, element) | Ta metoda zastępuje elementy o danym indeksie nowym elementem. Funkcja ta zwraca element, który właśnie został zastąpiony nowym elementem. |
| indeksOf(elementu) | Metoda ta zwraca pierwsze wystąpienie danego elementu lub -1 jeśli elementu nie ma w kolejce. |
| lastIndexOf(element) | Metoda ta zwraca ostatnie wystąpienie danego elementu lub -1 jeśli elementu nie ma w kolejce. |
| równa się (element) | Metoda ta służy do porównania równości danego elementu z elementami kolejki. |
| hashCode() | Metoda ta służy do zwrócenia wartości hashcode danej kolejki. |
| jest pusty() | Ta metoda służy do sprawdzania, czy kolejka jest pusta, czy nie. Zwraca wartość true, jeśli kolejka jest pusta, w przeciwnym razie wartość false. |
| zawiera (element) | Metoda ta służy do sprawdzenia czy kolejka zawiera dany element czy nie. Zwraca wartość true, jeśli kolejka zawiera element. |
| zawieraWszystko(kolekcja kolekcji) | Metoda ta służy do sprawdzenia, czy kolejka zawiera całą kolekcję elementów. |
| sort (komparator komparatora) | Metoda ta służy do sortowania elementów kolejki na podstawie podanych komparator . |
| wartość logiczna dodaj (obiekt) | Ta metoda służy do wstawiania określonego elementu do kolejki i zwracania wartości true w przypadku powodzenia. |
| oferta logiczna (obiekt) | Ta metoda służy do wstawienia określonego elementu do kolejki. |
| Sonda obiektu() | Ta metoda służy do pobierania i usuwania nagłówka kolejki lub zwraca wartość null, jeśli kolejka jest pusta. |
| Element obiektu() | Ta metoda służy do pobierania, ale nie usuwania początku kolejki. |
| Podgląd obiektu() | Ta metoda służy do pobierania nagłówka tej kolejki, ale jej nie usuwa, lub zwraca wartość null, jeśli kolejka jest pusta. |
Zalety korzystania z interfejsu kolejki w Javie:
Zachowanie porządku : Interfejs kolejki umożliwia przechowywanie i pobieranie elementów w określonej kolejności, zgodnie z zasadą „pierwsze weszło, pierwsze wyszło” (FIFO).
Elastyczność : Interfejs Queue jest podtypem interfejsu Collection, co oznacza, że można go używać z wieloma różnymi strukturami danych i algorytmami, w zależności od wymagań aplikacji.
Nitka – bezpieczeństwo : Niektóre implementacje interfejsu Queue, takie jak klasa java.util.concurrent.ConcurrentLinkedQueue, są bezpieczne dla wątków, co oznacza, że można uzyskać do nich dostęp przez wiele wątków jednocześnie, bez powodowania konfliktów.
Wydajność : Interfejs kolejki zapewnia wydajne implementacje dodawania, usuwania i sprawdzania elementów, dzięki czemu jest użytecznym narzędziem do zarządzania kolekcjami elementów w aplikacjach o krytycznym znaczeniu dla wydajności.
Wady korzystania z interfejsu kolejki w Javie:
Ograniczona funkcjonalność: Interfejs Queue został zaprojektowany specjalnie do zarządzania kolekcjami elementów w określonej kolejności, co oznacza, że może nie nadawać się do bardziej złożonych struktur danych lub algorytmów.
Ograniczenia rozmiaru: Niektóre implementacje interfejsu Queue, takie jak klasa ArrayDeque, mają stały rozmiar, co oznacza, że nie mogą rosnąć poza określoną liczbę elementów.
Zużycie pamięci: W zależności od implementacji interfejs Queue może wymagać więcej pamięci niż inne struktury danych, zwłaszcza jeśli musi przechowywać dodatkowe informacje o kolejności elementów.
Złożoność : Interfejs kolejki może być trudny w obsłudze i zrozumieniu dla początkujących programistów, zwłaszcza jeśli nie są zaznajomieni z zasadami struktur danych i algorytmami.