26

Queue インターフェイスしか表示されません。Java コレクションに Queue クラスはありませんか?

4

9 に答える 9

37

Javadocは、 を実装するクラスのリストを提供しますQueue

すべての既知の実装クラス:

AbstractQueueArrayBlockingQueueArrayDequeConcurrentLinkedQueueDelayQueueLinkedBlockingQueueLinkedBlockingDequeLinkedListPriorityBlockingQueuePriorityQueueSynchronousQueue

便利なサブインターフェースもいくつかあります。

すべての既知のサブインターフェイス:

BlockingDeque <E>、BlockingQueue <E>、Deque <E>

于 2009-04-29T20:20:45.530 に答える
10

キューには複数の実装があります: API から:

すべての既知の実装クラス:

AbstractQueue, ArrayBlockingQueue, ArrayDeque, ConcurrentLinkedQueue, 
DelayQueue, LinkedBlockingDeque, LinkedBlockingQueue, LinkedList, 
PriorityBlockingQueue, PriorityQueue, SynchronousQueue

AbstractQueue は具象クラスではないことに注意してください。

これらのいくつかはパッケージの並行性からのものであるため、ジョブキューなどを実装している場合は、ex.

于 2009-04-29T20:21:35.777 に答える
7

のドキュメントにQueueは、さまざまな実装がリストされています。

ニーズに合った実装を選択してください。

于 2009-04-29T20:20:35.703 に答える
3

いいえ、Queueクラスはありません。キューを実装するにはさまざまな方法があり、ユース ケースに適した方法を選択する必要があるためです。コレクション フレームワーク内の他のコレクションについても同じことが言えます。たとえば、ArrayListどちらLinkedListList. オブジェクト継承をうまく利用する一般的なパターンは次のとおりです。

たとえば、InterfaceQueueは、オブジェクトが果たす役割を定義します。

サブインターフェース、例えばDeque、ロールをさらに拡張または特殊化します。この場合、「deque」または両端キューを使用すると、キューの両端に要素を追加して削除するだけでなく、キューの両端から要素を追加および削除できます。正面から;

クラスは、オブジェクトがどのように役割を実行するかの実装を提供します。たとえばArrayDeque、サイズ変更可能な配列を使用して両端キューを実装しますLinkedList。これには、リンク リストを使用するのとは異なる長所と短所があります。

役割としてのインターフェースの考え方を詳しく説明すると、 がArrayDeque実装されていても、それを心配することなくDequeとして使用できることに注意してQueueください。両方のインターフェースを実装すると、両方の役割を果たすことができるからです。同様に、または帽子LinkedListをかぶることができます。ListQueueDeque

このため、コレクション フレームワークのようなものを使用する通常の (推奨される) 方法は、インターフェイスにプログラミングすることです。つまり、クラス名自体ではなく、クラスを使用するときにインターフェイスを使用します。たとえば、次のようにオブジェクトをインスタンス化します。

Queue<String> logQueue = new ConcurrentLinkedQueue<String>();
...
logQueue.add("Log message");

このようにあなたは

  • 特定のクラスに結び付けられておらず、必要に応じて多くのコードを変更することなくドロップイン置換を使用できます。
  • クラスが果たす役割に名前を付けて、クラスで何をしているかを文書化しています。これが役立つ一般的な原則は、自己文書化コードです。これは、本質的に、コメントなどを使用せずにコード自体を自明にすることです。
于 2012-12-12T17:47:02.477 に答える
2

http://java.sun.com/javase/6/docs/api/java/util/Queue.html -- 「すべての既知の実装クラス」セクションを参照してください。さまざまな目的に適したさまざまな実装があります。

于 2009-04-29T20:21:51.660 に答える
0
import java.util.Queue;

それだけ

Enqueue function == Queue_Object.add(input_value);

Dequeue function == Queue_Object.pull();   //return the value and delete it from queue
于 2010-05-22T19:10:41.330 に答える