java queue queue methods
In deze zelfstudie bespreken we wat een wachtrij in Java is, hoe deze te gebruiken, Java-wachtrijvoorbeeld, Java-wachtrijmethoden en implementatie van wachtrijinterface:
Een wachtrij is een lineaire gegevensstructuur of een verzameling in Java waarin elementen worden opgeslagen in een FIFO-volgorde (First In, First Out).
De wachtrijverzameling heeft twee uiteinden, namelijk voor en achter. De elementen zijn aan de achterkant toegevoegd en aan de voorkant verwijderd.
Bezoek hier om de Java-trainingsserie voor iedereen te zien.
Wat je leert:
Wat is een Java-wachtrij?
Een datastructuur van een wachtrij wordt weergegeven zoals hieronder weergegeven:
Zoals weergegeven in het bovenstaande diagram, is een wachtrij een structuur met twee punten, namelijk begin (voorkant) en einde (achterkant). Aan de achterkant worden elementen in de wachtrij geplaatst en aan de voorkant uit de wachtrij verwijderd.
websites om anime engels nagesynchroniseerd te bekijken
In Java is Queue een interface die deel uitmaakt van het java.util-pakket. De wachtrij-interface breidt de Java Collection-interface uit.
De algemene definitie van de wachtrij-interface is:
Omdat de wachtrij een interface is, kan deze niet worden geïnstantieerd. We hebben enkele concrete klassen nodig om de functionaliteit van de wachtrijinterface te implementeren. Twee klassen implementeren de wachtrij-interface, namelijk LinkedList en PriorityQueue.
Hieronder volgen enkele van de belangrijkste kenmerken van de Queue-gegevensstructuur:
- De wachtrij volgt de FIFO-volgorde (First In, First Out). Dit betekent dat het element aan het einde in de wachtrij wordt geplaatst en aan het begin uit de wachtrij wordt verwijderd.
- De Java-wachtrijinterface biedt alle methoden van de verzamelingsinterface, zoals invoegen, verwijderen, enz.
- LinkedList en PriorityQueue zijn de klassen die de Queue-interface implementeren. ArrayBlockingQueue is nog een andere klasse die de Queue-interface implementeert.
- De wachtrijen die deel uitmaken van het pakket java.util kunnen worden geclassificeerd als onbegrensde wachtrijen, terwijl de wachtrijen die aanwezig zijn in java.util. Het gelijktijdige pakket begrensde wachtrijen zijn.
- De Deque is een wachtrij die het invoegen en verwijderen van beide uiteinden ondersteunt.
- De deque is draadveilig.
- BlockingQueues zijn thread-safe en worden gebruikt om producer-consumer-problemen te implementeren.
- BlockingQueues staan geen null-elementen toe. Een NullPointerException wordt gegenereerd als wordt geprobeerd een bewerking met betrekking tot null-waarden uit te voeren.
Hoe een wachtrij in Java te gebruiken?
Om een wachtrij in Java te gebruiken, moeten we eerst de wachtrij-interface als volgt importeren:
Of
Zodra dit is geïmporteerd, kunnen we een wachtrij maken zoals hieronder weergegeven:
Omdat Queue een interface is, gebruiken we een LinkedList-klasse die de Queue-interface implementeert om een wachtrijobject te maken.
Evenzo kunnen we een wachtrij maken met andere concrete klassen.
Nu het wachtrij-object is gemaakt, kunnen we het wachtrij-object initialiseren door de waarden eraan te geven via de add-methode, zoals hieronder wordt weergegeven.
Voorbeeld van een Java-wachtrij
Uitgang:
De inhoud van de wachtrij: [een, twee, drie, vier]
Het bovenstaande voorbeeld toont de declaratie en initialisatie van een Queue-object. Vervolgens printen we gewoon de inhoud van de wachtrij.
Wachtrij-methoden in Java
In deze sectie bespreken we de API-methoden voor de wachtrij. Wachtrij-interface ondersteunt verschillende bewerkingen zoals invoegen, verwijderen, bekijken, enz. Sommige bewerkingen geven een uitzondering, terwijl andere een specifieke waarde retourneren wanneer de methode slaagt of mislukt.
Merk op dat er geen specifieke wijzigingen zijn in de Queue-collectie in Java 8. De onderstaande methoden zijn ook beschikbaar in latere versies van Java, zoals Java 9, enz.
De onderstaande tabel vat al deze methoden samen.
Methode | Methode Prototype | Omschrijving |
---|---|---|
grootte | int maat () | Retourneert de grootte of het aantal elementen in de wachtrij. |
toevoegen | boolean add (E e) | Voegt element e toe aan de wachtrij aan het einde (staart) van de wachtrij zonder de beperkingen op de capaciteit te schenden. Retourneert true als succes of IllegalStateException als de capaciteit is uitgeput. |
kijkje | E peek () | Geeft de kop (voorkant) van de wachtrij terug zonder deze te verwijderen. |
element | E-element () | Voert dezelfde bewerking uit als de methode peek (). Gooit NoSuchElementException wanneer de wachtrij leeg is. |
verwijderen | E verwijderen () | Verwijdert de kop van de wachtrij en geeft deze terug. Gooit NoSuchElementException als de wachtrij leeg is. |
poll | E poll () | Verwijdert de kop van de wachtrij en geeft deze terug. Als de wachtrij leeg is, retourneert deze null. |
Aanbod | booleaanse aanbieding (E e) | Voeg het nieuwe element e in de wachtrij in zonder capaciteitsbeperkingen te schenden. |
De wachtrijelementen herhalen
We kunnen de wachtrijelementen doorlopen met behulp van de forEach-lus of met een iterator. Het onderstaande programma implementeert beide benaderingen om de wachtrij te doorlopen.
Uitgang:
De wachtrij-elementen via iterator:
Waarde-0 Waarde-1 Waarde-2 Waarde-3
De wachtrij-elementen die for-lus gebruiken:
Waarde-0 Waarde-1 Waarde-2 Waarde-3
Implementatie van Java-wachtrij
Het onderstaande programma demonstreert de methoden die we hierboven hebben besproken.
Uitgang:
Elementen in wachtrij: [10, 20, 30, 40, 50]
Element verwijderd uit de wachtrij: 10
Hoofd van de wachtrij: 20
Poll (): Teruggekeerd Hoofd van de wachtrij: 20
peek (): Hoofd van de wachtrij: 30
Laatste wachtrij: [30, 40, 50]
Implementatie van Java Queue Array
Wachtrij-implementatie is niet zo eenvoudig als een stack-implementatie. Allereerst bevat de wachtrij twee aanwijzers, achterkant en voorkant. Er worden ook verschillende bewerkingen uitgevoerd aan twee verschillende uiteinden.
Om een wachtrij te implementeren met behulp van arrays, declareren we eerst een array die n aantal wachtrijelementen zal bevatten.
Vervolgens definiëren we de volgende bewerkingen die in deze wachtrij moeten worden uitgevoerd.
# 1) In wachtrij plaatsen: Een bewerking om een element in de wachtrij in te voegen is Enqueue (functie queueEnqueue in het programma). Om een element aan de achterkant in te voegen, moeten we eerst controleren of de wachtrij vol is. Als het vol is, kunnen we het element niet invoegen. Als achter # 2) Uitschrijven: De bewerking om een element uit de wachtrij te verwijderen is Dequeue (functie queueDequeue in het programma). We kijken eerst of de wachtrij leeg is. Om de wachtrij te verwijderen moet er ten minste één element in de wachtrij staan. # 3) Voorzijde: Deze methode retourneert de voorkant van de wachtrij. # 4) Weergave: Deze methode doorkruist de wachtrij en geeft de elementen van de wachtrij weer. Het volgende Java-programma demonstreert de Array-implementatie van Queue. Uitgang: Initiële wachtrij: Omdat we de Queue-datastructuur hebben geïmplementeerd met Arrays in het bovenstaande programma, kunnen we de Queue ook implementeren met Linked List. We zullen in dit programma dezelfde methoden implementeren enqueue, dequeue, front en display. Het verschil is dat we de datastructuur Linked List gaan gebruiken in plaats van Array. Het onderstaande programma demonstreert de Linked List-implementatie van Queue in Java. Uitgang: Element 6 toegevoegd aan de wachtrij BlockingQueue is een interface die is toegevoegd in Java 1.5 en maakt deel uit van het java.util.concurrent pakket. Deze interface introduceert blokkering voor het geval de BlockingQueue vol of leeg is. Dus wanneer een thread toegang heeft tot de wachtrij en probeert om elementen in een wachtrij in te voegen (in wachtrij plaatsen) die al vol is, wordt geblokkeerd totdat een andere thread een spatie in de wachtrij creëert (misschien door de wachtrij uit de wachtrij te halen of de wachtrij te wissen). Evenzo wordt in het geval van het verwijderen van wachtrij de bewerking geblokkeerd als de wachtrij leeg is totdat het element beschikbaar komt voor de bewerking voor het verwijderen van wachtrij. De BlockingQueue-methoden gebruiken een vorm van gelijktijdigheidscontrole, zoals interne vergrendelingen, en zijn atomair. De BlockingQueue is een gelijktijdige wachtrij die de wachtrijbewerkingen gelijktijdig beheert. De BlockingQueue wordt hieronder getoond: Merk op dat BlockingQueue geen null-waarden accepteert. Een poging om een null-waarde in de wachtrij in te voegen, resulteert in NullPointerException. Enkele van de BlockingQueue-implementaties die in Java worden geleverd, zijn LinkedBlockingQueue, PriorityBlockingQueue, ArrayBlockingQueue en SynchonousQueue. Al deze implementaties zijn thread-safe. Er zijn twee soorten wachtrijen: In de bounded queue wordt de capaciteit van de wachtrij doorgegeven aan de constructor van de wachtrij. De wachtrij declaratie is als volgt: BlockingQueue blockingQueue = nieuwe LinkedBlockingDeque (5); In de onbegrensde wachtrij stellen we de capaciteit van de wachtrij niet expliciet in en kan deze in omvang toenemen. De capaciteit is ingesteld op Integer.MAX_VALUE. De declaratie van de onbegrensde wachtrij is als volgt: BlockingQueue blockingQueue = nieuwe LinkedBlockingDeque (); De BlockingQueue-interface wordt voornamelijk gebruikt voor problemen van producent-consument, waarbij de producent de bronnen produceert en de consument de bronnen verbruikt. V # 1) Wat is een wachtrij in Java? Antwoord: Wachtrij in Java is een lineair geordende gegevensstructuur die de FIFO-volgorde (First In, First Out) van elementen volgt. Dit betekent dat het element dat als eerste in de wachtrij wordt geplaatst, het eerste element is dat wordt verwijderd. In Java is de wachtrij geïmplementeerd als een interface die de collectie-interface erft. Q # 2) Is een wachtrij-thread-veilige Java? Antwoord: Niet alle wachtrijen zijn thread-safe, maar BlockingQueues in Java zijn thread-safe. Q # 3) Wat is sneller - stapel of wachtrij? Antwoord: De stapel is sneller. In de stapel worden de elementen slechts vanaf één uiteinde verwerkt, waardoor verschuiven niet nodig is. Maar in de wachtrij moeten de elementen worden verschoven en aangepast, omdat er twee verschillende aanwijzingen zijn om elementen in te voegen en te verwijderen. Q # 4) Wat zijn de soorten wachtrijen? Antwoord: De wachtrijen zijn van de volgende typen: Q # 5) Waarom wordt de wachtrij gebruikt? Antwoord: De wachtrijgegevensstructuur wordt gebruikt voor synchronisatiedoeleinden. De wachtrij wordt ook gebruikt voor het plannen van schijven en CPU's. In deze tutorial hebben we de eenvoudige wachtrijen besproken, samen met hun details zoals declaraties, initialisatie-implementatie en methoden. We leerden ook over de implementatie van Array en LinkedList van Queue in Java. In onze aanstaande tutorials zullen we meer soorten wachtrijen in detail bespreken. Bekijk hier ALLE Java-tutorials.
Wachtrij is leeg
Wachtrij na bewerking in wachtrij:
10 = 30 = 50 = 70 =
Front Element van de wachtrij: 10
Wachtrij is vol
10 = 30 = 50 = 70 =
Wachtrij na twee uitrijbewerkingen: 50 = 70 =
Front Element van de wachtrij: 50Implementatie van gekoppelde lijst met Java-wachtrijen
hoe je een array als parameter in java doorgeeft
Element 3 toegevoegd aan de wachtrij
Voorkant van de wachtrij: 6 Achterkant van de wachtrij: 3
Element 12 toegevoegd aan de wachtrij
Element 24 toegevoegd aan de wachtrij
Element 6 verwijderd uit de wachtrij
Element 3 verwijderd uit de wachtrij
Element 9 toegevoegd aan de wachtrij
Voorkant van de wachtrij: 12 Achterkant van de wachtrij: 9BlockingQueue in Java
Wachtrijtypen blokkeren
Begrensde wachtrij
Onbegrensde wachtrij
Veel Gestelde Vragen
geen shockwave flash-object geïnstalleerd swf-bestandsspeler
Gevolgtrekking
Aanbevolen literatuur