web-dev-qa-db-ja.com

JavaでQueueオブジェクトをインスタンス化するにはどうすればいいですか?

私が試したとき:

Queue<Integer> q = new Queue<Integer>();

コンパイラがエラーを出しています。何か手助け?

また、キューを初期化したい場合は、キューのメソッドを実装する必要がありますか?

136
WM.

Queueはインターフェースです。つまり、Queueを直接作成することはできません。

次のいずれかのように、Queueインタフェースをすでに実装しているクラスを作成するのが最善の方法です。AbstractQueueArrayBlockingQueueConcurrentLinkedQueueDelayQueueLinkedBlockingQueueLinkedListPriorityBlockingQueuePriorityQueue、またはSynchronousQueue

別の方法は必要なQueueインターフェースを実装するあなた自身のクラスを書くことです。プログラムの他の部分にQueueを指定して特別なことをしたいというまれなケースを除いて、これは必要ありません。

public class MyQueue<T extends Tree> implements Queue<T> {
   public T element() {
     ... your code to return an element goes here ...
   }

   public boolean offer(T element) {
     ... your code to accept a submission offer goes here ...
   }

   ... etc ...
}

あまり使用されていない代替方法は、Queueを実装する無名クラスを構築することです。あなたはおそらくこれをしたくないでしょう、しかしそれはすべてのベースをカバーするためのオプションとしてリストされています。

new Queue<Tree>() {
   public Tree element() {
     ...
   };

   public boolean offer(Tree element) {
     ...
   };
   ...
};
144
Edwin Buck

Queue はインターフェースです。匿名の内部クラスを経由しない限り、直接インターフェースをインスタンス化することはできません。通常これはあなたがコレクションにしたいことではありません。代わりに、既存の実装を選択してください。例えば:

Queue<Integer> q = new LinkedList<Integer>();

または

Queue<Integer> q = new ArrayDeque<Integer>();

通常は、関心のあるパフォーマンスと並行性の特性によってコレクションの実装を選択します。

143
Jon Skeet
Queue<String> qe=new LinkedList<String>();

qe.add("b");
qe.add("a");
qe.add("c");

Queue はインターフェースなので、図のようにそのインスタンスを作成することはできません。

42
Jigar Joshi

Queueはインターフェースなので、Queueを明示的に構築することはできません。その実装クラスの1つをインスタンス化する必要があります。何かのようなもの:

Queue linkedList = new LinkedList();

H このテーマに関するJavaチュートリアルへのリンクです。

14
zmf

enter image description here

Queueインタフェースは、次のような追加の挿入、抽出、および検査操作でJava.util.Collectionを拡張します。

+offer(element: E): boolean //要素を挿入する

+poll(): E //要素を取得し、キューが空の場合はNULLを返します

+remove(): E //要素が取得されて削除され、キューが空の場合は例外がスローされます

+peek(): E //このキューの先頭を取得しますが、削除しません。このキューが空の場合はnullを返します。

+element(): E //このキューの先頭を取得しますが、削除しません。キューが空の場合は例外をスローします

Queueを実装するためのコード例:

Java.util.Queue<String> queue = new LinkedList<>();
queue.offer("Hello");
queue.offer("StackOverFlow");
queue.offer("User");

System.out.println(queue.peek());

while (queue.size() > 0){
    System.out.println(queue.remove() + " ");
}
//Since Queue is empty now so this will return NULL
System.out.println(queue.peek());

コードの出力:

Hello
Hello 
StackOverFlow 
User 
null
11
devDeejay

QueueはJavaのインターフェースです、それはできません。

代わりに、2つの選択肢があります。

オプション1:

Queue<Integer> Q = new LinkedList<>();

オプション2:

Queue<Integer> Q = new ArrayDeque<>();

それは他より少し速いので私はoption2を使うことを勧めます

6
Sujit

Queue in Java はインターフェースとして定義されており、すぐに使用できる実装がJDKリリースの一部として存在しています。ここにいくつかあります: LinkedList 、優先度キュー、ArrayBlockingQueue、ConcurrentLinkedQueue、リンク転送キュー、 同期キュー など.

SOこれらのクラスのいずれかを作成し、それをQueue参照として保持することができます。例えば

import Java.util.LinkedList;
import Java.util.Queue;

public class QueueExample {

 public static void main (String[] args) {
  Queue que = new LinkedList();
  que.add("first");
  que.offer("second");
  que.offer("third");
  System.out.println("Queue Print:: " + que);

  String head = que.element();
  System.out.println("Head element:: " + head);

  String element1 = que.poll();
  System.out.println("Removed Element:: " + element1);

  System.out.println("Queue Print after poll:: " + que);
  String element2 = que.remove();
  System.out.println("Removed Element:: " + element2);

  System.out.println("Queue Print after remove:: " + que);  
 }
}

Queueインターフェースを実装する独自のカスタムQueueを実装することもできます。

5
Java Guru

QueueはJavaのインタフェースです。できませんでした。試してみてください。

Queue<Integer> Q = new LinkedList<Integer>();
4
lcl