java queue queue methods
V tomto výukovém programu probereme Co je fronta v Javě, Jak ji používat, Příklad fronty Java, Metody fronty Java a implementace rozhraní fronty:
c ++ generuje náhodné číslo mezi 0 a 1
Fronta je lineární datová struktura nebo kolekce v Javě, která ukládá prvky v pořadí FIFO (první vstup, první výstup).
Sbírka front má dva konce, tj. Přední a zadní. Prvky jsou přidány vzadu a odstraněny zepředu.
=> Navštivte zde a prohlédněte si sérii školení Java pro všechny.
Co se naučíte:
Co je fronta Java?
Struktura dat fronty je znázorněna níže:
Jak je znázorněno ve výše uvedeném diagramu, fronta je struktura se dvěma body, tj. Počáteční (přední) a koncový (zadní). Prvky jsou vloženy do fronty na zadním konci a odstraněny z fronty vpředu.
V prostředí Java je Queue rozhraní, které je součástí balíčku java.util. Rozhraní fronty rozšiřuje rozhraní Java Collection.
Obecná definice rozhraní fronty je:
public interface Queue extends Collection
Protože fronta je rozhraní, nelze ji vytvořit. Abychom mohli implementovat funkčnost rozhraní fronty, potřebujeme několik konkrétních tříd. Dvě třídy implementují rozhraní fronty, tj. LinkedList a PriorityQueue.
Následuje několik hlavních charakteristik datové struktury fronty:
- Fronta sleduje pořadí FIFO (první dovnitř, první ven). To znamená, že prvek je vložen do fronty na konci a odebrán z fronty na začátku.
- Rozhraní fronty Java poskytuje všechny metody rozhraní Collection, jako je vkládání, mazání atd.
- LinkedList a PriorityQueue jsou třídy, které implementují rozhraní fronty. ArrayBlockingQueue je ještě další třída, která implementuje rozhraní fronty.
- Fronty, které jsou součástí balíčku java.util, lze klasifikovat jako neomezené fronty, zatímco ty, které jsou přítomné v java.util.the souběžném balíčku, jsou ohraničené fronty.
- Deque je fronta, která podporuje vkládání a mazání z obou konců.
- Deque je bezpečný pro vlákna.
- BlockingQueues jsou bezpečné pro vlákna a používají se k implementaci problémů výrobce a spotřebitele.
- BlockingQueues neumožňují nulové prvky. NullPointerException je vyvolána při pokusu o jakoukoli operaci související s hodnotami null.
Jak používat frontu v Javě?
Chcete-li použít frontu v prostředí Java, musíme nejprve importovat rozhraní fronty následujícím způsobem:
import java.util.queue;
Nebo
import java.util.*;
Po importu můžeme vytvořit frontu, jak je znázorněno níže:
Queue str_queue = new LinkedList ();
Protože fronta je rozhraní, použijeme k vytvoření objektu fronty třídu LinkedList, která implementuje rozhraní fronty.
Podobně můžeme vytvořit frontu s jinými konkrétními třídami.
Queue str_pqueue = new PriorityQueue (); Queue int_queue = new ArrayDeque ();
Nyní, když je vytvořen objekt fronty, můžeme inicializovat objekt fronty poskytnutím hodnot prostřednictvím metody add, jak je znázorněno níže.
str_queue.add(“one”); str_queue.add(“two”); str_queue.add(“three”);
Příklad fronty 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); } }
Výstup:
Obsah fronty: (jedna, dva, tři, čtyři)
Výše uvedený příklad ukazuje deklaraci a inicializaci objektu Queue. Poté už jen vytiskneme obsah fronty.
Metody fronty v Javě
V této části probereme metody API pro frontu. Rozhraní fronty podporuje různé operace, jako je vkládání, mazání, prohlížení atd. Některé operace vyvolávají výjimku, zatímco některé vracejí konkrétní hodnotu, když metoda uspěje nebo selže.
Všimněte si, že v kolekci Queue v prostředí Java 8 neexistují žádné konkrétní změny. Níže uvedené metody jsou k dispozici také v novějších verzích prostředí Java, jako je Java 9 atd.
Níže uvedená tabulka shrnuje všechny tyto metody.
Metoda | Metoda Prototyp | Popis |
---|---|---|
velikost | int velikost () | Vrátí velikost nebo počet prvků ve frontě. |
přidat | booleovský doplněk (E e) | Přidá prvek e do fronty na konci (ocas) fronty, aniž by došlo k porušení omezení kapacity. Vrátí true, pokud success, nebo IllegalStateException, pokud je kapacita vyčerpána. |
nahlédnout | E nahlédnout () | Vrátí hlavu (přední) fronty, aniž byste ji odstranili. |
živel | E prvek () | Provede stejnou operaci jako metoda peek (). Vyvolá NoSuchElementException, když je fronta prázdná. |
odstranit | E odebrat () | Odebere hlavu fronty a vrátí ji. Vyvolá NoSuchElementException, pokud je fronta prázdná. |
hlasování | E hlasování () | Odebere hlavu fronty a vrátí ji. Pokud je fronta prázdná, vrátí hodnotu null. |
Nabídka | booleovská nabídka (E e) | Vložte nový prvek e do fronty, aniž byste porušili omezení kapacity. |
Iterace prvků fronty
Můžeme procházet prvky fronty buď pomocí smyčky forEach, nebo pomocí iterátoru. Níže uvedený program implementuje oba přístupy k procházení fronty.
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 + ' '); } } }
Výstup:
Prvky fronty prostřednictvím iterátoru:
Hodnota-0 Hodnota-1 Hodnota-2 Hodnota-3
Prvky fronty využívající smyčku for:
Hodnota-0 Hodnota-1 Hodnota-2 Hodnota-3
Implementace fronty Java
Níže uvedený program ukazuje metody, které jsme diskutovali výše.
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); } }
Výstup:
Prvky ve frontě: (10, 20, 30, 40, 50)
Prvek odstraněn z fronty: 10
Vedoucí fronty: 20
Anketa (): Vrácená vedoucí fronty: 20
peek (): Vedoucí fronty: 30
Konečná fronta: (30, 40, 50)
Implementace pole fronty Java
Implementace fronty není tak přímočará jako implementace zásobníku. Nejprve fronta obsahuje dva ukazatele, zadní a přední. Různé operace se také provádějí na dvou různých koncích.
Chcete-li implementovat frontu pomocí polí, nejprve deklarujeme pole, které bude obsahovat n počet prvků fronty.
Poté definujeme následující operace, které mají být provedeny v této frontě.
# 1) Zařadit: Operace pro vložení prvku do fronty je Enqueue (funkce queueEnqueue v programu). Pro vložení prvku na zadní konec musíme nejprve zkontrolovat, zda je fronta plná. Pokud je plný, nemůžeme prvek vložit. Pokud je vzadu # 2) Řazení: Operace k odstranění prvku z fronty je Dequeue (funkce queueDequeue v programu). Nejprve zkontrolujeme, zda je fronta prázdná. Aby operace dequeue fungovala, musí být ve frontě alespoň jeden prvek. # 3) Přední: Tato metoda vrací přední část fronty. # 4) Displej: Tato metoda prochází frontou a zobrazuje prvky fronty. Následující program Java demonstruje implementaci pole Queue. Výstup: Počáteční fronta: Protože jsme ve výše uvedeném programu implementovali datovou strukturu fronty pomocí polí, můžeme frontu implementovat také pomocí propojeného seznamu. V tomto programu implementujeme stejné metody enqueue, dequeue, front a display. Rozdíl je v tom, že místo Array budeme používat datovou strukturu Linked List. Níže uvedený program demonstruje implementaci propojeného seznamu fronty v Javě. Výstup: Prvek 6 přidán do fronty BlockingQueue je rozhraní přidané do prostředí Java 1.5 a je součástí java.util.concurrent balík. Toto rozhraní zavádí blokování v případě, že je BlockingQueue plná nebo prázdná. Takže když vlákno přistupuje do fronty a pokusí se vložit (zařadit) prvky do fronty, která je již plná, je blokováno, dokud jiné vlákno nevytvoří prostor ve frontě (možná operací vyřazení z fronty nebo vymazáním fronty). Podobně v případě dequeuingu je operace blokována, pokud je fronta prázdná, dokud nebude prvek k dispozici pro operaci dequeue. Metody BlockingQueue používají nějakou formu řízení souběžnosti, jako jsou vnitřní zámky, a jsou atomické. BlockingQueue je souběžná fronta, která souběžně spravuje operace fronty. Blokovací fronta je zobrazena níže: Všimněte si, že BlockingQueue nepřijímá hodnoty null. Výsledkem pokusu o vložení hodnoty null do fronty je NullPointerException. Některé z implementací BlockingQueue poskytované v Javě jsou LinkedBlockingQueue, PriorityBlockingQueue, ArrayBlockingQueue a SynchonousQueue. Všechny tyto implementace jsou bezpečné pro vlákna. BlockingQueues jsou dvou typů: V ohraničené frontě je kapacita fronty předána konstruktoru fronty. Deklarace fronty je následující: BlockingQueue blockingQueue = new LinkedBlockingDeque (5); V neomezené frontě explicitně nenastavujeme kapacitu fronty a její velikost může narůstat. Kapacita je nastavena na Integer.MAX_VALUE. Deklarace neomezené fronty je následující: BlockingQueue blockingQueue = new LinkedBlockingDeque (); Rozhraní BlockingQueue se primárně používá pro typy problémů producent-spotřebitel, kde producent produkuje zdroje a spotřebitel spotřebovává prostředky. Otázka č. 1) Co je to fronta v Javě? Odpovědět: Fronta v Javě je lineární uspořádaná datová struktura, která následuje FIFO (First In, First Out) řazení prvků. To znamená, že prvek vložený jako první do fronty bude prvním prvkem, který bude odstraněn. V Javě je fronta implementována jako rozhraní, které zdědí rozhraní Collection. Otázka č. 2) Je fronta bezpečná pro Java? Odpovědět: Ne všechny fronty jsou bezpečné pro vlákna, ale BlockingQueues v Javě jsou bezpečné pro vlákna. Otázka č. 3) Který je rychlejší - zásobník nebo fronta? Odpovědět: Zásobník je rychlejší. V zásobníku se prvky zpracovávají pouze z jednoho konce, a proto není nutné žádné posunutí. Ale ve frontě je třeba prvky posunout a upravit, protože existují dva různé ukazatele pro vložení a odstranění prvků. Otázka č. 4) Jaké jsou typy fronty? Odpověď: Fronty jsou následujících typů: Otázka č. 5) Proč se fronta používá? Odpovědět: Struktura dat fronty se používá pro účely synchronizace. Fronta se také používá pro plánování disku a CPU. V tomto kurzu jsme diskutovali o jednoduchých frontách spolu s jejich podrobnostmi, jako jsou deklarace, implementace inicializace a metody. Dozvěděli jsme se také o implementaci fronty Array a LinkedList v Javě. V našich připravovaných tutoriálech podrobně probereme více typů front. => Zkontrolujte VŠECHNY výukové programy Java zde. 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
Fronta je prázdná
Fronta po operaci zařazení do fronty:
10 = 30 = 50 = 70 =
Přední prvek fronty: 10
Fronta je plná
10 = 30 = 50 = 70 =
Fronta po dvou operacích řazení: 50 = 70 =
Přední prvek fronty: 50Implementace propojeného seznamu Java Queue
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(); } }
nejlepší bezplatný čistič pc pro Windows 10
Prvek 3 přidán do fronty
Přední část fronty: 6 Zadní část fronty: 3
Prvek 12 přidán do fronty
Prvek 24 přidán do fronty
Prvek 6 odstraněn z fronty
Prvek 3 odstraněn z fronty
Prvek 9 přidán do fronty
Přední část fronty: 12 Zadní část fronty: 9BlockingQueue v Javě
Typy blokování fronty
Ohraničená fronta
Neomezená fronta
Často kladené otázky
Závěr
co mohu dělat s c ++
Doporučené čtení