web-dev-qa-db-ja.com

FIFO Javaのクラス

Javaのクラスを介してFIFOを実装したい。

そのようなクラスはすでに存在しますか?そうでない場合、どのように自分の実装できますか?

NOTE

ここでクラスを見つけました http://www.dcache.org/manuals/cells/docs/api/dmg/util/Fifo.html ですが、dmg.util。*が含まれていません。そのようなパッケージが存在するかどうかはわかりません。

56
Rog Matthews

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インターフェイスに属しているため、引き続き問題ありません。

111
paxdiablo

ArrayDequeまたはLinkedListを試してください。どちらもQueueインターフェイスを実装しています。

http://docs.Oracle.com/javase/6/docs/api/Java/util/ArrayDeque.html

17
Rusty

Queue sは先入れ先出し構造です。あなたの要求はかなりあいまいですが、私はあなたが通常キュー構造で出てくる基本的な機能だけが必要であると推測しています。あなたはそれをどのように実装できるかを見ることができます here

不足しているパッケージに関しては、そのチュートリアルに従ってパッケージをダウンロードまたは作成する必要があるためです。

2
npinti

独自のFIFOキューを実装する必要はありません。インターフェイス Java.util.Queue とその実装を見るだけです

1
ftr

データの書き込み/読み取りパイプを使用する場合は、 http://docs.Oracle.com/javase/6/docs/api/Java/io/PipedWriter.html を使用できます。

1
Hachi

LinkedBlockingQueue を使用できます。プロジェクトで使用します。標準のJavaの一部であり、かなり 使いやすい

0
kalgecin