キューインターフェイスしか表示されませんが、Javaコレクションにキュークラスはありませんか?
JavadocQueue
を実装するクラスのリストを提供します。
すべての既知の実装クラス:
AbstractQueue 、 ArrayBlockingQueue 、 ArrayDeque 、 ConcurrentLinkedQueue 、 DelayQueue 、 LinkedBlockingQueue 、 LinkedBlockingDeque 、 LinkedList 、 PriorityBlockingQueue 、 PriorityQueue 、 SynchronousQueue
役立つと思われるサブインターフェイスもいくつかあります。
すべての既知のサブインターフェイス:
BlockingDeque <E>、 BlockingQueue <E>、 Deque <E>
キューには複数の実装があります:APIから:
すべての既知の実装クラス:
AbstractQueue, ArrayBlockingQueue, ArrayDeque, ConcurrentLinkedQueue,
DelayQueue, LinkedBlockingDeque, LinkedBlockingQueue, LinkedList,
PriorityBlockingQueue, PriorityQueue, SynchronousQueue
AbstractQueueは具体的なクラスではないことに注意してください。
これらの一部は並行パッケージからのものであるため、ジョブキューなどを実装している場合は、たとえば、ConcurrentLinkedQueueまたはPriorityBlockingQueue(ヒープの場合)を使用する必要があります。
Queue<Integer> queue = new ArrayDeque<>();
queue.add(1);
queue.add(2);
queue.add(3);
while (!queue.isEmpty()) {
System.out.println(queue.remove());// prints 1 2 3
}
LinkedListを使用することもできます。ただし、一般的に、キューの場合、LinkedListよりもArrayDequeが優先されます。 ArrayDequeはより少ないメモリを消費し、より高速で、nullを許可しないためです。 nullを許可しないのは良いことです。なぜなら、nullを許可すると、peek()またはpoll()を実行すると、キューが空でなくてもnullを取得する可能性があるからです。
いいえ、Queue
クラスはありません。キューを実装する方法はたくさんあり、ユースケースに合ったものを選択する必要があるためです。同じことがコレクションフレームワークの他のコレクションにも当てはまります。たとえば、ArrayList
とLinkedList
はどちらもList
を実装します。オブジェクトの継承をうまく利用する一般的なパターンは次のとおりです。
インターフェース、例: Queue
は、オブジェクトに果たす役割を定義します。
サブインターフェース、例: Deque
は、役割をさらに拡張または特殊化します。この場合、「両端キュー」または両端キューを使用すると、キューの両端に要素を追加したり、キューの両端から要素を削除したりできます。前面から取り外します。
クラスオブジェクトが役割を実行する方法の実装を提供します。たとえば、ArrayDeque
はサイズ変更可能な配列を使用して、リンクリストを使用するLinkedList
とは長所と短所が異なる両端キューを実装します。
役割としてのインターフェースの概念を詳しく説明するために、ArrayDeque
はDeque
を実装しますが、実装するため、それを心配することなくQueue
として使用できることに注意してください。両方のインターフェースは、両方の役割を果たすことができることを意味します。同様に、LinkedList
はList
、Queue
、またはDeque
の帽子をかぶることができます。
このため、Collectionsフレームワークのようなものを使用する通常の(推奨される)方法は、インターフェイスにプログラムすることです、つまり、クラスではなくクラスを使用するときにインターフェイスを使用します名前自体。たとえば、次のようなオブジェクトをインスタンス化します。
Queue<String> logQueue = new ConcurrentLinkedQueue<String>();
...
logQueue.add("Log message");
このようにあなたは
APIドキュメントを使用して「すべての既知の実装クラス」を見つけるだけでなく、パブリックAPIを介して利用できる他の非パブリック実装がよくあります(無意味なドキュメントの連なりを必要としない場合のみ)。 「 se 」をクリックすると、 Collections.asLifoQueue (Deque
はすでにQueue
ですが、FIFO)。
答えは軽蔑のように聞こえますが、実際には釣り方を教えてくれるのでかなりクールです。キューは単にコレクションを確認する方法であるため、多くのコレクションがそれを実装している可能性があります。同様に、コレクションのように機能するが、特定の他のロジック(スレッドキューなど)を持つものは、同じインターフェイスを使用する場合があります。
Javadocsをどこで見るかを知ることは大きな助けになります。あなたは見たと思いますが、実装を見ようとは思わなかっただけです。生活し、学びます。
サブクラス/拡張リストを追跡する必要がある場合もあります。 Queueを見てAbstractQueueを見た場合のように、どのクラスがそれを実装しているかを確認したい場合があります。
私はあなたの-1の1つをあなたのために取り除きます:)
http://Java.Sun.com/javase/6/docs/api/Java/util/Queue.html -「すべての既知の実装クラス」のセクションを参照してください。さまざまな目的に適したさまざまな実装があります。
import Java.util.Queue;
それだけ
Enqueue function == Queue_Object.add(input_value);
Dequeue function == Queue_Object.pull(); //return the value and delete it from queue