Apache CommonsガイドCircularFifoQueue
1概要
このクイックチュートリアルでは、Apache Commons Collectionsライブラリの
collections4.queue
パッケージに含まれている
CircularFifoQueue
データ構造を見てみましょう
_.
_
CircularFifoQueue <E>
は
Queue <E>
インターフェースを実装し、
fixed-size
、
non-blocking queue
–
いっぱいになったキューに要素を追加すると、最も古い要素が削除され、空き領域が確保されます。新しい要素
の場合
2 Mavenの依存関係
Mavenプロジェクトの場合は、必要な依存関係を追加する必要があります。
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.1</version>
</dependency>
このライブラリの最新版はhttps://search.maven.org/classic/#search%7Cga%7C1%7Cg%3A%22org.apache.commons%22%20AND%20a%3A%22commons-collections4にあります%22[メイヴン中央]。
3コンストラクタ
CircularFifoQueue
オブジェクトを作成するために、デフォルトコンストラクタを使用することができます。これは、デフォルトサイズ32でキューを作成します。
CircularFifoQueue<String> bits = new CircularFifoQueue();
キューの最大サイズがわかっている場合は、サイズを指定するための引数として
int
をとるコンストラクタを使用できます。
CircularFifoQueue<String> colors = new CircularFifoQueue<>(5);
引数としてコンストラクタにコレクションを与えることによって
CircularFifoQueue
オブジェクトを作成するオプションもあります。
この場合、キューはコレクションの要素で埋められ、そのサイズはコレクションのサイズと同じになります。
CircularFifoQueue<String> 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
は
null:
を返します。
String colorsHead = colors.peek();
5.2.
Element
メソッド
element
メソッドは
peek
と似ています – キューの現在の先頭を返します** 。
ただし、キューが空の場合、
element
メソッドは例外をスローします。
colorsHead = colors.element();
5.3.
Get
メソッド
キューから特定の要素を取得する必要がある場合は、
get
メソッドを使用できます。このメソッドは、目的の要素のインデックスを引数として取ります。キューのインデックスは0から始まります。
先ほど要素を埋めた
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
メソッド
はキューの先頭要素を削除し、その要素
を返します。キューに要素がない場合、
poll
メソッドは__nullを返します。
colorsHead = colors.poll();
5.5. __削除方法
-
remove
メソッドは
poll
メソッドとよく似た動作をします
キューの先頭を返し、返された要素を削除します。
ただし、
キューが空の場合、
remove
は例外をスローします
。
colorsHead = colors.remove();
5.6. クリア方法
キューを空にしたい場合は、
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();
キューがいっぱいかどうかを確認するには、
isAtFullCapacity
メソッドを使用できます。このメソッドは、キュー内の要素の最大サイズに達した場合にのみ
true
を返します。
boolean isFull = daysOfWeek.isAtFullCapacity();
このメソッドはバージョン4.1以降で利用可能であることに注意してください。
キューがいっぱいかどうかを確認するために使用できる
Queue
インターフェイスのもう1つのメソッドは
isFull
メソッドです。
CircularFifoQueue
の場合、キューは常に新しい要素を受け入れることができるため、
isFull
メソッドは常に
false、
を返します。
boolean isFull = daysOfWeek.isFull();
7. 結論
この記事では、Apache Commons
CircularFifoQueue
の使い方を見ました。キューオブジェクトをインスタンス化する方法、塗りつぶす方法、空にする方法、要素を取得および削除する方法、サイズと容量を確認する方法を示す例をいくつか見ました。
あなたは私たちのhttps://github.com/eugenp/tutorials/tree/master/libraries-apache-commons[GitHubプロジェクト]でこの記事で使用されている完全なサンプルコードを見つけることができます。これはMavenプロジェクトなので、インポートしてそのまま実行できるはずです。
-
«** 前へ