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プロジェクトなので、インポートしてそのまま実行できるはずです。

  • «** 前へ