Apache Commons CircularFifoQueueのガイド
1. 概要
このクイックチュートリアルでは、Apache Commons Collectionsライブラリ.のcollections4.queueパッケージで提供されるCircularFifoQueueデータ構造を確認します。
CircularFifoQueue<E>はQueue<E>インターフェースを実装し、fixed-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プロジェクトの場合、必要な依存関係を追加する必要があります。
org.apache.commons
commons-collections4
4.1
このライブラリの最新バージョンはMaven Centralにあります。
3. コンストラクタ
CircularFifoQueueオブジェクトを作成するには、デフォルトのコンストラクターを使用できます。これにより、デフォルトのサイズが32のキューが作成されます。
CircularFifoQueue bits = new CircularFifoQueue();
キューの目的の最大サイズがわかっている場合は、intを引数として取るコンストラクターを使用してサイズを指定できます。
CircularFifoQueue colors = new CircularFifoQueue<>(5);
コンストラクターに引数としてコレクションを指定することにより、CircularFifoQueueオブジェクトを作成するオプションもあります。
この場合、キューはコレクションの要素で満たされ、そのサイズはコレクションのサイズと同じになります。
CircularFifoQueue daysOfWeek = new CircularFifoQueue<>(days);
注:このキューは構築時にすでにいっぱいになっているため、追加すると最初に作成された要素が破棄されます。
4. 要素を追加する
他のQueue実装と同様に、addおよびofferメソッドを使用して要素を追加できます。 Queue JavaDocは、容量が制限されているキューで操作するときにofferメソッドを使用することを目的としていることを指定します。
ただし、CircularFifoQueueは非ブロッキングであるため、挿入が失敗することはありません。 その結果、そのaddメソッドとofferメソッドは同じ動作を示します。
addメソッドを使用してcolorsキューに要素を追加する方法を見てみましょう。
colors.add("Red");
colors.add("Blue");
colors.add("Green");
そして、offerメソッドを使用していくつかの要素を追加しましょう。
colors.offer("White");
colors.offer("Black");
5. 要素の削除と取得
CircularFifoQueueクラスは、キューの要素を操作する必要がある場合に役立ついくつかのメソッドを提供します。 キューから要素を取得するために使用されるメソッド、要素を削除するメソッド、および両方の操作を同時に実行するメソッドがあります。
5.1. Peekメソッド
peekメソッドは非破壊的で、returns the head of the queueです。
このメソッドは、呼び出しの間にキュー内の要素に変更がない限り、常に同じ要素を返します。 If the queue is empty, peek will return null:
String colorsHead = colors.peek();
5.2. Elementメソッド
elementメソッドはpeekに似ています—それはreturns the current head of the queueです。
ただし、キューが空の場合、elementメソッドは例外をスローします。
colorsHead = colors.element();
5.3. Getメソッド
キューから特定の要素を取得する必要がある場合は、getメソッドを使用できます。 このメソッドは、目的の要素のインデックスを引数として受け取ります。 キューのインデックスはゼロベースです。
以前に要素で埋めたcolorsキューから要素を取得しましょう。
String color = colors.get(1);
これにより、「Blue」が返されます。
次に、キューに3つの要素を追加して、この結果をもう一度確認しましょう。
colors.add("Orange");
colors.add("Violet");
colors.add("Pink");
color = colors.get(1);
今回は、getメソッドは「Black」を返します。 これは、キューが5つの制限されたサイズで作成され、最初の3つの要素(「Red」、「Blue」、「Green」)が追加されて削除されたためです。新しいもの。
5.4. Pollメソッド
pollメソッドremoves the head element of the queue and returns that element。 キューに要素がない場合、pollメソッドはnull:を返します
colorsHead = colors.poll();
5.5. Removeメソッド
The remove methodoperates much like the poll method —キューの先頭を返し、返された要素を削除します。 ただし、, if the queue is empty, remove will throw an exception:
colorsHead = colors.remove();
5.6. Clearメソッド
キューを空にする場合は、clearメソッドを使用できます。
colors.clear();
6. 確認方法
キューの要素を追加、削除、取得する方法を確認した後、サイズと容量の確認に関してクラスが提供するものを確認しましょう。 例の前のセクションで作成したキューを使用します。
一般に、キューのサイズをチェックする方法は2つあります。1つはオブジェクトの最大サイズを取得する方法、もう1つは現在の要素数をチェックする方法です。
maxSizeメソッドは、キューの最大サイズのinteger値を返します。
int maxSize = bits.maxSize();
bitsキューはデフォルトのコンストラクターで作成されたため、これは32を返します。
sizeメソッドは、現在キューに格納されている要素の数を返します。
int size = colors.size();
キューオブジェクトの容量を確認するには、isEmptyメソッドとisAtFullCapacityメソッドを使用できます。
isEmptyメソッドは、キューが空であるかどうかを示すboolean値を返します。
boolean isEmpty = bits.isEmpty();
キューがいっぱいかどうかを確認するには、the isAtFullCapacity methodを使用できます。 このメソッドreturns true only if the maximum size of elements in the queue has been reached:
boolean isFull = daysOfWeek.isAtFullCapacity();
このメソッドはavailable as of version 4.1であることに注意してください。
キューがいっぱいかどうかを確認するために使用できるQueueインターフェイスのもう1つのメソッドは、isFullメソッドです。 CircularFifoQueue、the isFull method will always return false, because the queue can always accept new elementsの場合:
boolean isFull = daysOfWeek.isFull();
7. 結論
この記事では、Apache CommonsCircularFifoQueueの使用方法を見ました。 キューオブジェクトをインスタンス化する方法、それを埋める方法、空にする方法、要素を取得および削除する方法、およびサイズと容量を確認する方法を示す例をいくつか見てきました。
この記事で使用されている完全なサンプルコードは、GitHub projectにあります。 これはMavenプロジェクトなので、インポートしてそのまま実行できるはずです。