Javaのクラスを介してFIFOを実装したい。
そのようなクラスはすでに存在しますか?そうでない場合、どのように自分の実装できますか?
NOTE
ここでクラスを見つけました http://www.dcache.org/manuals/cells/docs/api/dmg/util/Fifo.html ですが、dmg.util。*が含まれていません。そのようなパッケージが存在するかどうかはわかりません。
FIFOアルゴリズムを使用しないPriorityQueue
およびPriorityBlockingQueue
を除く Queue interface を実装するクラスを探しています。
おそらく、 LinkedListadd
(末尾に1を追加)とremoveFirst
(前面から削除して返す)を使用するのが最も簡単な方法です。
たとえば、LinkedListを使用してPIの数字をキューに入れて取得するプログラムは次のとおりです。
import Java.util.LinkedList;
class Test {
public static void main(String args[]) {
char arr[] = {3,1,4,1,5,9,2,6,5,3,5,8,9};
LinkedList<Integer> fifo = new LinkedList<Integer>();
for (int i = 0; i < arr.length; i++)
fifo.add (new Integer (arr[i]));
System.out.print (fifo.removeFirst() + ".");
while (! fifo.isEmpty())
System.out.print (fifo.removeFirst());
System.out.println();
}
}
または、knowをキューとしてのみ扱いたい場合(リンクリストの追加機能なし)、Queue
インターフェース自体:
import Java.util.LinkedList;
import Java.util.Queue;
class Test {
public static void main(String args[]) {
char arr[] = {3,1,4,1,5,9,2,6,5,3,5,8,9};
Queue<Integer> fifo = new LinkedList<Integer>();
for (int i = 0; i < arr.length; i++)
fifo.add (new Integer (arr[i]));
System.out.print (fifo.remove() + ".");
while (! fifo.isEmpty())
System.out.print (fifo.remove());
System.out.println();
}
}
これには、コードをあまり変更することなく、基になる具象クラスをQueue
インターフェイスを提供するクラスに置き換えることができるという利点があります。
基本的な変更は、fifo
のタイプをQueue
に変更し、remove()
の代わりにremoveFirst()
を使用することです。後者はQueue
インターフェイスでは使用できません。
isEmpty()
の呼び出しは、Collection
が派生物であるQueue
インターフェイスに属しているため、引き続き問題ありません。
ArrayDeque
またはLinkedList
を試してください。どちらもQueue
インターフェイスを実装しています。
http://docs.Oracle.com/javase/6/docs/api/Java/util/ArrayDeque.html
独自のFIFOキューを実装する必要はありません。インターフェイス Java.util.Queue とその実装を見るだけです
データの書き込み/読み取りパイプを使用する場合は、 http://docs.Oracle.com/javase/6/docs/api/Java/io/PipedWriter.html を使用できます。
LinkedBlockingQueue を使用できます。プロジェクトで使用します。標準のJavaの一部であり、かなり 使いやすい