Java Wachtrij – Wachtrij in Java

Java Queue is een interface beschikbaar in het java.util-pakket en breidt de java.util.Collection-interface uit. Net als Java List is Java Queue een verzameling geordende elementen (of objecten), maar het voert invoeg- en verwijderbewerkingen anders uit. We kunnen Queue gebruiken om elementen op te slaan voordat we die elementen verwerken.

Java Queue

In dit gedeelte zullen we enkele belangrijke punten bespreken over Java Queue:

  • java.util.Queue-interface is een subtype van de java.util.Collection-interface.
  • Net als in een echte wachtrij (bijvoorbeeld in een bank of bij een geldautomaat), voegt Queue elementen toe aan het einde van de wachtrij en verwijdert ze vanaf het begin van de wachtrij.
  • Java Queue vertegenwoordigt een geordende lijst van elementen.
  • Java Queue volgt FIFO-volgorde om elementen in te voegen en te verwijderen. FIFO staat voor First In First Out.
  • Java Queue ondersteunt alle methoden van de Collection-interface.
  • De meest gebruikte implementaties van Queue zijn LinkedList, ArrayBlockingQueue en PriorityQueue.
  • BlockingQueues accepteren geen null-elementen. Als we een null-gerelateerde bewerking uitvoeren, wordt er een NullPointerException gegenereerd.
  • BlockingQueues worden gebruikt om producent/consumptie-gebaseerde toepassingen te implementeren.
  • BlockingQueues zijn thread-safe.
  • Alle Wachtrijen die beschikbaar zijn in het java.util-pakket zijn Onbegrensde Wachtrijen en Wachtrijen die beschikbaar zijn in het java.util.concurrent-pakket zijn Begrensde Wachtrijen.
  • Alle Deques zijn niet thread-safe.
  • ConcurrentLinkedQueue is een onbegrensde thread-safe Wachtrij gebaseerd op gelinkte knooppunten.
  • Alle Wachtrijen ondersteunen invoeging aan het einde van de wachtrij en verwijdering aan het begin van de wachtrij, behalve Deques.
  • Deques zijn wachtrijen, maar ze ondersteunen elementinvoeging en verwijdering aan beide uiteinden.

Java Wachtrij Klasse Diagram

Java Wachtrij-interface breidt Collection-interface uit. Collection-interface breidt Iterable-interface uit. Enkele van de veelgebruikte implementatieklassen van Wachtrij zijn LinkedList, PriorityQueue, ArrayBlockingQueue, DelayQueue, LinkedBlockingQueue, PriorityBlockingQueue, enz. AbstractQueue biedt een skeletimplementatie van de Wachtrij-interface om de inspanning bij de implementatie van de Wachtrij te verminderen.

Java Wachtrij Methoden

In dit gedeelte zullen we enkele nuttige en veelgebruikte Java Wachtrij-methoden bespreken:

  1. int size(): om het aantal elementen in de Set te krijgen.
  2. boolean isEmpty(): om te controleren of Set leeg is of niet.
  3. boolean contains(Object o): Geeft true terug als deze Set het gespecificeerde element bevat.
  4. Iterator iterator(): Geeft een iterator terug over de elementen in deze set. De elementen worden teruggegeven in willekeurige volgorde.
  5. boolean removeAll(Collection c): Verwijdert uit deze set alle elementen die zijn opgenomen in de gespecificeerde collectie (optionele bewerking).
  6. boolean retainAll(Collection c): Behoudt alleen de elementen in deze set die zijn opgenomen in de gespecificeerde collectie (optionele bewerking).
  7. void clear(): Verwijdert alle elementen uit de set.
  8. E remove(): Retrieves and removes the head of this queue.
  9. E poll(): Retrieves and removes the head of this queue, or returns null if this queue is empty.
  10. E peek(): Retrieves, but does not remove, the head of this queue, or returns null if this queue is empty.
  11. boolean offer(E e): Voegt het gespecificeerde element in deze wachtrij in als het onmiddellijk mogelijk is om dit te doen zonder de capaciteitsbeperkingen te schenden.
  12. E element(): Retrieves, but does not remove, the head of this queue.
  13. boolean add(E e): Voegt het gespecificeerde element in deze wachtrij in als het onmiddellijk mogelijk is om dit te doen zonder de capaciteitsbeperkingen te schenden, true retournerend bij succes en een IllegalStateException gooiend als er momenteel geen ruimte beschikbaar is.
  14. Object[] toArray(): Retourneert een array met alle elementen in deze set. Als deze set garanties biedt over in welke volgorde de elementen worden geretourneerd door de iterator, moet deze methode de elementen in dezelfde volgorde retourneren.

Java Queue Basics

Als Java Queue Java Collection uitbreidt, ondersteunt het ook alle operaties van de Collection-interface. Laten we enkele eenvoudige operaties verkennen in het volgende voorbeeld:

package com.journaldev.queue;
import java.util.*;

public class QueueExample {
   public static void main(String[] args) {
		
	Queue queue = new LinkedList<>();
	queue.add("one");
	queue.add("two");
	queue.add("three");
	queue.add("four");
	System.out.println(queue);
		
	queue.remove("three");
	System.out.println(queue);
	System.out.println("Queue Size: " + queue.size());
	System.out.println("Queue Contains element 'two' or not? : " + queue.contains("two"));

	// Om de wachtrij leeg te maken
	queue.clear();
   }
}

Uitvoer:-

[one, two, three, four]
[one, two, four]
Queue Size: 3
Queue Contains element 'two' or not? : true

Java-array naar Queue

Hier kunnen we ontdekken hoe we een Java-array naar een Queue kunnen converteren met de “Collections.addAll()” methode aan de hand van één eenvoudig voorbeeld.

import java.util.*;

public class ArrayToQueue {
    public static void main(String[] args) {
		
	String nums[] = {"one","two","three","four","five"};
	Queue<String> queue = new LinkedList<>();
	Collections.addAll(queue, nums);
	System.out.println(queue);
   }
}

Uitvoer:- Wanneer we het bovenstaande programma uitvoeren, krijgen we de volgende uitvoer:

[one, two, three, four, five]

Java Queue naar Array

Hier zullen we ontdekken hoe we een Java Queue naar een Java Array kunnen converteren met de “toArray()” methode aan de hand van één eenvoudig voorbeeld.

import java.util.*;

public class QueueToArray {
   public static void main(String[] args) {
		
	Queue<String> queue = new LinkedList<>();
	queue.add("one");
	queue.add("two");
	queue.add("three");
	queue.add("four");
	queue.add("five");
		
	String strArray[] = queue.toArray(new String[queue.size()]);
	System.out.println(Arrays.toString(strArray)); 

   }
}

Uitvoer:- Wanneer we het bovenstaande programma uitvoeren, krijgen we de volgende uitvoer:

[one, two, three, four, five]

Algemene Java Queue-operaties

Java Queue ondersteunt alle operaties die worden ondersteund door de Collection-interface en enkele extra operaties. Het ondersteunt bijna alle operaties in twee vormen.

  • Een set bewerkingen werpt een uitzondering op als de bewerking mislukt.
  • De andere set bewerkingen retourneert een speciale waarde als de bewerking mislukt.

De volgende tabel legt alle gemeenschappelijke wachtrijbewerkingen kort uit.

Operation Throws exception Special value
Insert add(e) offer(e)
Remove remove() poll()
Examine element() peek()

We zullen elke bewerking oppakken en deze gedetailleerd bespreken met enkele nuttige voorbeelden in de komende secties.

Java Wachtrij Invoegbewerkingen

In deze sectie zullen we de Java Wachtrij Invoegbewerking gedetailleerd bespreken met enkele nuttige voorbeelden. Als deze bewerking succesvol wordt uitgevoerd, retourneert deze de waarde “true”. Zoals we weten, ondersteunt een wachtrij invoegbewerking in twee vormen:

  • Wachtrij.toevoegen(e):
    Het werpt een uitzondering op als de bewerking mislukt.- Wachtrij.aanbieden(e):
    Het retourneert een speciale waarde als de bewerking mislukt.

OPMERKING:- Hier kan de speciale waarde ofwel “false” ofwel “null” zijn

Wachtrij toevoegen() bewerking

De toevoegen() bewerking wordt gebruikt om een nieuw element in de wachtrij in te voegen. Als het invoegen succesvol wordt uitgevoerd, retourneert het de waarde “true”. Anders werpt het java.lang.IllegalStateException op. Laten we een eenvoudig voorbeeld ontwikkelen om deze functionaliteit te demonstreren.

import java.util.concurrent.*;

public class QueueAddOperation {
   public static void main(String[] args) {
		
	BlockingQueue<String> queue = new ArrayBlockingQueue<>(2);

	System.out.println(queue.add("one"));
	System.out.println(queue.add("two"));
	System.out.println(queue);
	System.out.println(queue.add("three"));
	System.out.println(queue);
   }
}

Uitvoer:- Wanneer we het bovenstaande programma uitvoeren, krijgen we de volgende uitvoer:

true
true
[one, two]
Exception in thread "main" java.lang.IllegalStateException: Queue full

Omdat onze wachtrij beperkt is tot twee elementen, wanneer we proberen een derde element toe te voegen met behulp van BlockingQueue.add(), wordt er een uitzondering gegooid zoals hierboven weergegeven.

Wachtrij offer() operatie

De offer() operatie wordt gebruikt om een nieuw element in de wachtrij in te voegen. Als de invoeroperatie succesvol wordt uitgevoerd, geeft het “true” terug. Anders geeft het “false” terug. Laten we een eenvoudig voorbeeld ontwikkelen om deze functionaliteit te demonstreren.

import java.util.concurrent.*;

public class QueueOfferOperation {
   public static void main(String[] args) {
		
	BlockingQueue<String> queue = new ArrayBlockingQueue<>(2);

	System.out.println(queue.offer("one"));
	System.out.println(queue.offer("two"));
	System.out.println(queue);
	System.out.println(queue.offer("three"));
	System.out.println(queue);
   }
}

Uitvoer:- Wanneer we het bovenstaande programma uitvoeren, krijgen we de volgende uitvoer:

true
true
[one, two]
false
[one, two]

Omdat onze wachtrij beperkt is tot twee elementen, wanneer we proberen een derde element toe te voegen met behulp van BlockingQueue.offer() operatie, geeft het “false” terug zoals hierboven weergegeven.

Java Queue Verwijderingsoperaties

In dit gedeelte zullen we Java Queue Verwijderingsoperatie in detail bespreken met enkele nuttige voorbeelden. De verwijderingsoperaties geven het hoofdelement van de wachtrij terug als ze succesvol worden uitgevoerd. Zoals we weten, ondersteunt de wachtrij verwijderingsoperatie in twee vormen:

  • Queue.remove():
    Het gooit een uitzondering als de operatie mislukt.- Queue.poll():
    Het geeft een speciale waarde terug als de operatie mislukt.

OPMERKING:- Hier kan de speciale waarde ofwel “false” of “null” zijn.

Queue verwijder() operatie

De verwijder() operatie wordt gebruikt om een element van het begin van de wachtrij te verwijderen. Als de verwijderoperatie succesvol wordt uitgevoerd, geeft het het eerste element van de wachtrij terug. Anders gooit het java.util.NoSuchElementException. Laten we een eenvoudig voorbeeld ontwikkelen om deze functionaliteit te demonstreren.

import java.util.*;

public class QueueRemoveOperation 
{
   public static void main(String[] args) 
   {		
	Queue<String> queue = new LinkedList<>();
	queue.offer("one");
	queue.offer("two");		
	System.out.println(queue);		
	System.out.println(queue.remove());
	System.out.println(queue.remove());		
	System.out.println(queue.remove());		
   }
}

Uitvoer:- Wanneer we het bovenstaande programma uitvoeren, krijgen we de volgende uitvoer:

[one, two]
one
two
Exception in thread "main" java.util.NoSuchElementException

Omdat onze wachtrij slechts twee elementen bevat, wanneer we proberen de methode remove() voor de derde keer aan te roepen, gooit het een uitzondering zoals hierboven getoond. OPMERKING:- Queue.remove(element) wordt gebruikt om een specifiek element uit de wachtrij te verwijderen. Als de verwijderoperatie succesvol wordt uitgevoerd, geeft het de waarde “true” terug. Anders geeft het de waarde “false” terug.

Queue poll() operatie

De poll() operatie wordt gebruikt om een element van het begin van de wachtrij te verwijderen. Als de verwijderoperatie succesvol wordt uitgevoerd, geeft het het eerste element van de wachtrij terug. Anders geeft het de waarde “null” terug. Laten we een eenvoudig voorbeeld ontwikkelen om deze functionaliteit te demonstreren.

import java.util.*;

public class QueuePollOperation 
{
   public static void main(String[] args) 
   {		
	Queue<String> queue = new LinkedList<>();
	queue.offer("one");
	queue.offer("two");		
	System.out.println(queue);		
	System.out.println(queue.poll());
	System.out.println(queue.poll());		
	System.out.println(queue.poll());		
   }
}

Uitvoer:- Wanneer we het bovenstaande programma uitvoeren, krijgen we de volgende uitvoer:

[one, two]
one
two
null

Omdat onze wachtrij slechts twee elementen heeft, wanneer we de methode poll() voor de derde keer proberen aan te roepen, geeft deze een null-waarde terug zoals hierboven weergegeven.

Java Wachtrij Examinatie Operaties

In dit gedeelte zullen we de Java Wachtrij Examinatie-operaties in detail bespreken met enkele nuttige voorbeelden. Als deze operatie succesvol wordt uitgevoerd, geeft deze het eerste element van de wachtrij terug zonder dit te verwijderen. Zoals we weten, ondersteunt Wachtrij de examine-operatie in twee vormen:

  • Wachtrij.element():
    Het gooit een uitzondering als de operatie mislukt.- Wachtrij.peek():
    Het geeft een speciale waarde terug als de operatie mislukt.

OPMERKING:- Hier kan de speciale waarde ofwel “false” of “null” zijn

Wachtrij element() operatie

De element() operatie wordt gebruikt om een element van het begin van de wachtrij op te halen, zonder dit te verwijderen. Als de examine-operatie succesvol wordt uitgevoerd, geeft deze het eerste element van de wachtrij terug. Anders gooit het java.util.NoSuchElementException. Laten we een eenvoudig voorbeeld ontwikkelen om deze functionaliteit te demonstreren.

import java.util.*;

public class QueueElementOperation {
   public static void main(String[] args) {
		
	Queue<String> queue = new LinkedList<>();
	queue.add("one");
		
	System.out.println(queue.element());
	System.out.println(queue);
	queue.clear();
	System.out.println(queue.element());
   }
}

Uitvoer:- Wanneer we het bovenstaande programma uitvoeren, krijgen we de volgende uitvoer:

one
[one]
Exception in thread "main" java.util.NoSuchElementException

Als we de element() methode proberen aan te roepen op een lege wachtrij, werpt het een uitzondering op zoals hierboven getoond.

Wachtrij peek() operatie

De peek() operatie wordt gebruikt om een element uit het begin van de wachtrij op te halen, zonder het te verwijderen. Als het onderzoek succesvol wordt uitgevoerd, retourneert het het eerste element van de wachtrij. Anders retourneert het een null waarde. Laten we een eenvoudig voorbeeld ontwikkelen om deze functionaliteit te demonstreren.

import java.util.*;

public class QueuePeekOperation {
   public static void main(String[] args) {
		
	Queue<String> queue = new LinkedList<>();
	queue.add("one");
		
	System.out.println(queue.peek());
	System.out.println(queue);
	queue.clear();
	System.out.println(queue.peek());
   }
}

Output:- Wanneer we het bovenstaande programma uitvoeren, krijgen we de volgende uitvoer:

one
[one]
null

Als we proberen de peek() methode aan te roepen op een lege wachtrij, retourneert het een null waarde, maar werpt het geen uitzondering op zoals hierboven getoond.

Java Wachtrij Categorieën

In Java kunnen we veel implementaties van wachtrijen vinden. We kunnen ze breed categoriseren in de volgende twee typen

  • Begrensde Wachtrijen
  • Ongelimiteerde Wachtrijen

Bounded Queues zijn wachtrijen die begrensd zijn door capaciteit, wat betekent dat we de maximale grootte van de wachtrij moeten opgeven op het moment van creatie. Bijvoorbeeld ArrayBlockingQueue (zie vorig voorbeeld). Unbounded Queues zijn wachtrijen die NIET begrensd zijn door capaciteit, wat betekent dat we de grootte van de wachtrij niet hoeven op te geven. Bijvoorbeeld LinkedList (zie vorig voorbeeld). Alle wachtrijen die beschikbaar zijn in het java.util-pakket zijn Unbounded Queues, en wachtrijen die beschikbaar zijn in het java.util.concurrent-pakket zijn Bounded Queues. Op andere manieren kunnen we ze breed categoriseren in de volgende twee typen:

  • Blocking Queues
  • Non-Blocking Queues

Alle wachtrijen die de BlockingQueue-interface implementeren, zijn BlockingQueues en de rest zijn Non-Blocking Queues. BlockingQueues blokkeren totdat ze hun taak hebben voltooid of time-out hebben, maar Non-BlockingQueues doen dat niet. Sommige wachtrijen zijn Deques en sommige wachtrijen zijn PriorityQueues.

BlockingQueue-operaties

Naast de twee vormen van operaties van de wachtrij ondersteunt BlockingQueue twee meer vormen zoals hieronder getoond.

Operation Throws exception Special value Blocks Times out
Insert add(e) offer(e) put(e) offer(e, time, unit)
Remove remove() poll() take() poll(time, unit)
Examine element() peek() N/A N/A

Sommige operaties worden geblokkeerd totdat ze hun taak hebben voltooid en andere worden geblokkeerd totdat ze time-out hebben. Dat is alles voor een snelle samenvatting van Queue in Java. Ik hoop dat deze Java Queue-voorbeelden je helpen bij het beginnen met Queue-collectieprogrammering. Laat me alsjeblieft een opmerking achter als je mijn tutorials leuk vindt of suggesties, problemen of typfouten hebt. Bedankt.

Source:
https://www.digitalocean.com/community/tutorials/java-queue