私がしようとすると:
Queue<Integer> q = new Queue<Integer>();
コンパイラがエラーを出します。何か助け?
また、キューを初期化する場合、キューのメソッドを実装する必要がありますか?
私がしようとすると:
Queue<Integer> q = new Queue<Integer>();
コンパイラがエラーを出します。何か助け?
また、キューを初期化する場合、キューのメソッドを実装する必要がありますか?
回答:
A Queue
はインターフェースです。つまり、Queue
直接作成することはできません。
最良のオプションは、すでに実装していることクラスオフ構築することであるQueue
:以下のいずれかのように、インターフェースをAbstractQueue
、ArrayBlockingQueue
、ArrayDeque
、ConcurrentLinkedQueue
、DelayQueue
、LinkedBlockingQueue
、LinkedList
、PriorityBlockingQueue
、PriorityQueue
、またはを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) {
...
};
...
};
Queue
が匿名を使用するのを恐れています...しかし、とにかく+1します。
ArrayDeque
Queue
インターフェースです。匿名の内部クラスを介さない限り、インターフェースを直接インスタンス化することはできません。通常、これはコレクションに対して実行したいことではありません。代わりに、既存の実装を選択してください。例えば:
Queue<Integer> q = new LinkedList<Integer>();
または
Queue<Integer> q = new ArrayDeque<Integer>();
通常、関心のあるパフォーマンスと同時実行性の特性に基づいてコレクションの実装を選択します。
Queue<String> qe=new LinkedList<String>();
qe.add("b");
qe.add("a");
qe.add("c");
以来Queue
インターフェースであるあなたが示すように、あなたはそれのインスタンスを作成することはできません。
java.util.Queue
インターフェースです。インターフェイスをインスタンス化することはできません。そのインターフェースを実装するクラスのインスタンスを作成する必要があります。この場合、LinkedListはそのようなクラスです。
Stack<String> stack = new Stack<>(); stack.push("a"); stack.push("b"); System.out.println(stack.pop());
import java.util.Stack;
Queueインターフェースは、次のような追加の挿入、抽出、および検査操作でjava.util.Collectionを拡張します。
+offer(element: E):
boolean // 要素を挿入する
+poll(): E
// 要素を取得し、キューが空の場合はNULLを返します
+remove(): E
// 要素を取得して削除し、キューが空の場合は例外をスローします
+peek(): E
// このキューの先頭を取得しますが、削除しません。このキューが空の場合はnullを返します。
+element(): E
// このキューの先頭を取得しますが、削除はしませんが、キューが空の場合は例外をスローします。
キューを実装するコードの例:
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
Javaのキューはインターフェースとして定義されており、すぐに使用できる実装の多くがJDKリリースの一部として提供されています。:ここではいくつかある LinkedListは、優先順位キュー、ArrayBlockingQueue、ConcurrentLinkedQueue、リンクされた転送キュー、同期キューなど
SOこれらのクラスを作成して、キュー参照として保持できます。例えば
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インターフェースを実装することもできます。