Leitfaden für Apache Commons CircularFifoQueue

Leitfaden zu Apache Commons CircularFifoQueue

1. Überblick

In diesem kurzen Tutorial sehen wir uns die Datenstruktur vonCircularFifoQueuean, die im Paketcollections4.queueder Apache Commons Collections-Bibliothek. enthalten ist

CircularFifoQueue<E> implementiert dieQueue<E>-Schnittstelle und istfixed-size,non-blocking queue -when you add an element to a queue that is full, the oldest element is removed to make room for the new element.

2. Maven-Abhängigkeit

Für Maven-Projekte müssen wir die erforderliche Abhängigkeit hinzufügen:


    org.apache.commons
    commons-collections4
    4.1

Die neueste Version dieser Bibliothek finden Sie unterMaven Central.

3. Konstruktoren

Um einCircularFifoQueue-Objekt zu erstellen, können Sie den Standardkonstruktor verwenden, der eine Warteschlange mit der Standardgröße 32 erstellt:

CircularFifoQueue bits = new CircularFifoQueue();

Wenn wir die gewünschte maximale Größe unserer Warteschlange kennen, können wir den Konstruktor verwenden, der einint als Argument verwendet, um die Größe anzugeben:

CircularFifoQueue colors = new CircularFifoQueue<>(5);

Es besteht auch die Möglichkeit, einCircularFifoQueue-Objekt zu erstellen, indem dem Konstruktor eine Auflistung als Argument zugewiesen wird.

In diesem Fall wird die Warteschlange mit den Elementen der Sammlung gefüllt und ihre Größe entspricht der Größe der Sammlung:

CircularFifoQueue daysOfWeek = new CircularFifoQueue<>(days);

Hinweis: Da diese Warteschlange beim Erstellen bereits voll ist, wird bei jedem Hinzufügen das zuerst erstellte Element verworfen.

4. Elemente hinzufügen

Wie bei jeder Implementierung vonQueuekönnen wir Elemente mithilfe der Methodenadd undofferhinzufügen. Queue JavaDoc gibt an, dass die Methodeoffer verwendet werden soll, wenn mit einer Warteschlange mit eingeschränkter Kapazität gearbeitet wird.

DaCircularFifoQueue jedoch nicht blockiert, können Einfügungen nicht fehlschlagen. Infolgedessen zeigen die Methodenadd undoffer das gleiche Verhalten.

Lassen Sie uns sehen, wie wir mit der MethodeaddElemente zur Warteschlange voncolorshinzufügen können:

colors.add("Red");
colors.add("Blue");
colors.add("Green");

Fügen wir einige Elemente mit der Methodeofferhinzu:

colors.offer("White");
colors.offer("Black");

5. Elemente entfernen und abrufen

Die KlasseCircularFifoQueuebietet uns einige Methoden, die nützlich sein können, wenn wir die Elemente der Warteschlange bearbeiten müssen. Einige Methoden werden zum Abrufen von Elementen aus der Warteschlange verwendet, andere zum Entfernen von Elementen und andere zum gleichzeitigen Ausführen beider Vorgänge.

5.1. Peek Methode

Die Methodepeek ist zerstörungsfrei undreturns the head of the queue.

Diese Methode gibt immer dasselbe Element zurück, solange zwischen den Aufrufen keine Änderungen an den Elementen in der Warteschlange vorgenommen wurden. If the queue is empty, peek will return null:

String colorsHead = colors.peek();

5.2. Element Methode

Die Methodeelement ähneltpeek - itreturns the current head of the queue.

Die Methodeelementlöst jedoch eine Ausnahme aus, wenn die Warteschlange leer ist:

colorsHead = colors.element();

5.3. Get Methode

Wenn wir ein bestimmtes Element aus der Warteschlange abrufen müssen, können wir die Methodegetverwenden. Diese Methode verwendet den Index des gewünschten Elements als Argument. Der Index der Warteschlange basiert auf Null.

Lassen Sie uns ein Element aus der Warteschlange voncolorsabrufen, das wir zuvor mit Elementen gefüllt haben:

String color = colors.get(1);

Dies gibt "Blue" zurück.

Fügen wir nun drei Elemente zu unserer Warteschlange hinzu und überprüfen Sie dieses Ergebnis erneut:

colors.add("Orange");
colors.add("Violet");
colors.add("Pink");

color = colors.get(1);

Diesmal gibt die MethodegetBlack“ zurück. Dies liegt daran, dass unsere Warteschlange mit einer begrenzten Größe von fünf erstellt wurde und die ersten drei Elemente („Red“, „Blue“, „Green“) durch Hinzufügen von entfernt wurden die neuen.

5.4. Poll Methode

Diepoll Methoderemoves the head element of the queue and returns that element. Wenn die Warteschlange keine Elemente enthält, gibt die Methodepollnull: zurück

colorsHead = colors.poll();

5.5. Remove Methode

The remove methodoperates much like the poll method - Gibt den Kopf der Warteschlange zurück und entfernt das zurückgegebene Element. Jedoch, if the queue is empty, remove will throw an exception:

colorsHead = colors.remove();

5.6. Clear Methode

Wir können die Methodeclearverwenden, wenn wir unsere Warteschlange leeren möchten:

colors.clear();

6. Methoden überprüfen

Nachdem wir gesehen haben, wie wir Elemente der Warteschlange hinzufügen, entfernen und abrufen können, wollen wir sehen, was die Klasse in Bezug auf die Überprüfung ihrer Größe und Kapazität zu bieten hat. In unseren Beispielen werden die in den vorherigen Abschnitten erstellten Warteschlangen verwendet.

Im Allgemeinen haben wir zwei Methoden zur Verfügung, um die Größe unserer Warteschlange zu überprüfen - eine, um die maximale Größe des Objekts zu ermitteln, und eine, um die aktuelle Anzahl der Elemente zu überprüfen.

Die MethodemaxSize gibt eineninteger-Wert der maximalen Größe der Warteschlange zurück:

int maxSize = bits.maxSize();

Dies gibt32 zurück, da die Warteschlangebits mit dem Standardkonstruktor erstellt wurde.

Die Methodesize gibt die Anzahl der aktuell in der Warteschlange gespeicherten Elemente zurück:

int size = colors.size();

Um die Kapazität des Warteschlangenobjekts zu überprüfen, können Sie die MethodenisEmpty undisAtFullCapacityverwenden.

Die MethodeisEmpty gibt einen Wert vonbooleanzurück, der angibt, ob die Warteschlange leer ist oder nicht:

boolean isEmpty = bits.isEmpty();

Um zu überprüfen, ob unsere Warteschlange voll ist, können wirthe isAtFullCapacity method verwenden. Diese Methodereturns true only if the maximum size of elements in the queue has been reached:

boolean isFull = daysOfWeek.isAtFullCapacity();

Sie sollten beachten, dass diese Methodeavailable as of version 4.1 ist.

Eine andere Methode derQueue-Schnittstelle, mit der wir überprüfen können, ob unsere Warteschlange voll ist, ist dieisFull-Methode. FürCircularFifoQueue giltthe isFull method will always return false, because the queue can always accept new elements:

boolean isFull = daysOfWeek.isFull();

7. Fazit

In diesem Artikel haben wir gesehen, wie die Apache CommonsCircularFifoQueue verwendet werden. Wir haben einige Beispiele gesehen, die veranschaulichen, wie ein Warteschlangenobjekt instanziiert, gefüllt, geleert, Elemente abgerufen und daraus entfernt sowie seine Größe und Kapazität überprüft werden.

Den vollständigen Beispielcode für diesen Artikel finden Sie in unserenGitHub project. Dies ist ein Maven-Projekt. Sie sollten es also importieren und so ausführen können, wie es ist.