2009-04-29 20 views

答えて

7

Queueリストのドキュメントの様々な実装は、あなたのニーズに合った実装を選択してください。

+0

http://java.sun.com/j2se/1.5.0/docs/api/java/util/ArrayList.htmlによると、ArrayListには、キューを実装していません。 –

+0

はい、私はいくつかのリンクを得るために戻ったときにそれを実現しました。明らかに私の記憶には誤りがあります。 – Rob

+2

それが起こります。 Javaライブラリ全体が記憶されていると感心します。 EEが記憶されていたら、私はゆっくりと後退します。 –

31

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

既知の実装クラスの一覧:

AbstractQueueArrayBlockingQueueArrayDequeConcurrentLinkedQueueDelayQueueLinkedBlockingQueueLinkedBlockingDequeLinkedListPriorityBlockingQueuePriorityQueueSynchronousQueue

いくつかのサブインターフェイスれもあります役に立つと分かるかもしれません:

既知のサブインタフェースの一覧:

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

+9

なぜ人々はJavaDocsに行っていけないのか不思議です:P +1 – Perpetualcoder

+4

はGoogleよりも速くスタックオーバーフローですか? – IAdapter

+5

本当に怠惰な人のために、DeQueを持つものはすべて両端キューです。 – Powerlord

10

キューは、複数の実装があります

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

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

AbstractQueueは具体的なクラスではありません。

これらはパッケージのコンカレントからのものですので、ジョブキューなどを実装している場合は、ConcurrentLinkedQueueまたはPriorityBlockingQueue(ヒープ用)に移動してください。

3

「すべての既知の実装クラス」を見つけるためにAPIドキュメントを使用するだけでなく、公開APIを介して利用できる他の非public実装もあります(無意味なドキュメントを必要としません)。 "use"をクリックした場合、Collections.asLifoQueueDequeは既にQueueですが、スタックではなくFIFOです)。

+0

たびたび「使用」ページを再発見し、「こんにちは、これは素晴らしいです!」と思っています。そして、私はそれらをもう一度忘れる。 –

+0

"使用"ページには最大のUIがありません。 –

2

答えは敬遠しますが、実際には魚の釣り方を教えてくれてとても涼しいです。キューは単なるコレクションを見る方法なので、多くのコレクションがそのコレクションを実装しています。同様に、コレクションのように動作するが、特定の他のロジック(スレッドキューなど)を持つものは、同じインターフェイスを使用することがあります。

javadocsをどこで調べるのが大きな助けになります。私はあなたが見ていると確信していますが、実装を見てと思っていませんでした。生活し、学びます。

場合によっては、サブクラス/拡張リストを追いかける必要があります。 Queueを見て、AbstractQueueを見た場合、クラスがそれを実装しているかどうかを知りたいかもしれません。

私はyaのためにあなた-1,2の一つを取り除くよ:)

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 
2

さまざまな方法がたくさんあるので、いいえ、Queueクラスは、ありませんキューを実装するためには、ユースケースに合ったものを選ぶ必要があります。同じことがコレクションフレームワークの他のコレクションのいずれにも当てはまります。たとえば、ArrayListLinkedListの両方がListを実装しています。一般的なパターンは、オブジェクトの継承を有効に使用します。

インターフェイスです。 Queueは、オブジェクトで再生するロールを定義します。

サブインターフェイスDequeは、ロールをさらに拡大または特殊化します。この場合、デキューまたはダブルエンドキューでは、キューの両端に要素を追加したり削除したりできます。

クラスは、オブジェクトがどのように役割を果たすかの実装を提供します。たとえば、ArrayDequeは、リサイズ可能な配列を使用してダブルエンドキューを実装します。これは、リンクリストを使用するLinkedListとは異なる長所と短所を持っています。役割としてインターフェイスの考え方については詳しく説明し

は、ArrayDequeDequeを実装していても、両方のインターフェイスを実装することが両方の役割を果たしていることができることを意味するので、あなたはそれを心配することなくQueueとしてそれを使用することができることに注意してください。同様に、LinkedListは、List,QueueまたはDequeハットを着用することができます。

このため、Collectionsフレームワークのようなものを使用するには、インターフェイスへのプログラムへのプログラムの使用が推奨されます。つまり、クラス名ではなくクラスを使用するときにインターフェイスを使用します。あなたが特定のクラスに関連付けられていない

  • ある。このように

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

    し、必要に応じて多くを変更することなく、ドロップイン置換を使用することができます。たとえば、次のようなオブジェクトをインスタンス化しますコード、

  • は、クラスで何をしているのかを、そのクラスの役割に名前を付けて文書化しています。これが役に立つ一般的な原則は、自己文書化コードです。これは、本質的に、コード自体がコメントなどを使わずに自明であるようにするためです。
1
Queue<Integer> queue = new LinkedList<>(); 

queue.add(1); 
queue.add(2); 
queue.add(3); 

while (!queue.isEmpty()) { 
    System.out.println(queue.remove());// prints 1 2 3 
} 
関連する問題