Wenn ich versuche:
Queue<Integer> q = new Queue<Integer>();
Der Compiler gibt mir einen Fehler. Irgendeine Hilfe?
Wenn ich eine Warteschlange initialisieren möchte, muss ich auch die Methoden der Warteschlange implementieren?
wam090
Wenn ich versuche:
Queue<Integer> q = new Queue<Integer>();
Der Compiler gibt mir einen Fehler. Irgendeine Hilfe?
Wenn ich eine Warteschlange initialisieren möchte, muss ich auch die Methoden der Warteschlange implementieren?
Queue
ist eine Schnittstelle. Sie können eine Schnittstelle nicht direkt instanziieren, außer über eine anonyme innere Klasse. Typischerweise dies ist nicht was Sie für eine Sammlung tun möchten. Wählen Sie stattdessen eine vorhandene Implementierung aus. Zum Beispiel:
Queue<Integer> q = new LinkedList<Integer>();
oder
Queue<Integer> q = new ArrayDeque<Integer>();
In der Regel wählen Sie eine Sammlungsimplementierung nach den Leistungs- und Parallelitätsmerkmalen aus, an denen Sie interessiert sind.
Aus ArrayDeque: “Diese Klasse ist wahrscheinlich schneller als Stack, wenn sie als Stapel verwendet wird, und schneller als LinkedList, wenn sie als Warteschlange verwendet wird.” Dies liegt an der CPU-Cache-freundlichen Datenlokalität und weniger häufigen Zuweisungen.
– Wadzim
30. September 2016 um 18:13 Uhr
Edwin Buck
EIN Queue
ist eine Schnittstelle, was bedeutet, dass Sie keine konstruieren können Queue
direkt.
Die beste Option besteht darin, eine Klasse zu konstruieren, die die bereits implementiert Queue
Schnittstelle, wie eine der folgenden: AbstractQueue
, ArrayBlockingQueue
, ArrayDeque
, ConcurrentLinkedQueue
, DelayQueue
, LinkedBlockingQueue
, LinkedList
, PriorityBlockingQueue
, PriorityQueue
oder SynchronousQueue
.
Eine Alternative besteht darin, eine eigene Klasse zu schreiben, die die erforderliche Warteschlangenschnittstelle implementiert. Es ist nicht erforderlich, außer in den seltenen Fällen, in denen Sie etwas Besonderes tun möchten, während Sie den Rest Ihres Programms mit a versorgen 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 ...
}
Eine noch seltener verwendete Alternative besteht darin, eine anonyme Klasse zu erstellen, die implementiert Queue
. Sie möchten dies wahrscheinlich nicht tun, aber es wird als Option aufgeführt, um alle Grundlagen abzudecken.
new Queue<Tree>() {
public Tree element() {
...
};
public boolean offer(Tree element) {
...
};
...
};
Oh je … Ich fürchte, jemand, der dies liest, wird einen anonymen Namen verwenden Queue
… aber trotzdem +1.
– Tom
7. Januar 2011 um 23:05 Uhr
Eigentlich ist Jons klarer. Ich werde dies +1 geben, wenn Sie es aktualisieren, um Parallelität zu erwähnen und den Code für anonyme Klassen loszuwerden … Ich denke, es macht die Antwort verwirrender für jemanden, der wissen möchte, was zu tun ist, weil er es mit ziemlicher Sicherheit nicht will TU das. (Selbst wenn sie ihre eigene Klasse wollten, besteht keine Notwendigkeit, sie anonym zu machen.)
– Tom
7. Januar 2011 um 23:08 Uhr
@Tom hat die anonymen Klasseninformationen nicht herausgenommen, da es gut zu wissen ist, dass dies möglich ist, aber ich habe das “Schreiben Sie Ihre eigene Implementierung” davor eingefügt, was es weiter von den zuerst aufgeführten (häufigeren) Alternativen entfernt.
– Edwin Buck
10. Januar 2011 um 4:51 Uhr
Warum nicht erwähnen ArrayDeque
– JW.ZG
11. Dezember 2016 um 22:59 Uhr
Ich kann die Methode enqueue() in keiner der von Ihnen erwähnten Klassen finden, ich kann nur die Methode add() finden, bitte korrigieren Sie mich, wenn ich falsch liege.
– Sreekanth Karumanaghat
21. Juli 2020 um 9:33 Uhr
jmj
Queue<String> qe=new LinkedList<String>();
qe.add("b");
qe.add("a");
qe.add("c");
Seit Queue
eine Schnittstelle ist, können Sie keine Instanz davon erstellen, wie Sie es veranschaulicht haben
java.util.Queue
ist eine Schnittstelle. Sie können Schnittstellen nicht instanziieren. Sie müssen eine Instanz einer Klasse erstellen, die diese Schnittstelle implementiert. In diesem Fall ist eine LinkedList eine solche Klasse.
– Mihai Toader
7. Januar 2011 um 15:05 Uhr
@Tod war ja unterwegs.. 🙂
– jmj
7. Januar 2011 um 15:06 Uhr
Danke @JigarJoshi!! Gibt es eine Möglichkeit, dasselbe mit Stack zu tun? Ich konnte nichts finden.
– Zehra Subas
7. Juni 2018 um 23:28 Uhr
@ Zeh Stack<String> stack = new Stack<>(); stack.push("a"); stack.push("b"); System.out.println(stack.pop());
import java.util.Stack;
– jmj
8. Juni 2018 um 7:30 Uhr
zmf
Queue ist eine Schnittstelle; Sie können eine Warteschlange nicht explizit erstellen. Sie müssen eine der implementierenden Klassen instanziieren. Etwas wie:
Queue linkedList = new LinkedList();
Die Queue-Schnittstelle erweitert java.util.Collection um zusätzliche Einfügungs-, Extraktions- und Inspektionsoperationen wie:
+offer(element: E):
boolesch // Einfügen eines Elements
+poll(): E
// Ruft das Element ab und gibt NULL zurück, wenn die Warteschlange leer ist
+remove(): E
// Ruft das Element ab und entfernt es und löst eine Ausnahme aus, wenn die Warteschlange leer ist
+peek(): E
// Ruft den Kopf dieser Warteschlange ab, entfernt ihn jedoch nicht und gibt null zurück, wenn diese Warteschlange leer ist.
+element(): E
// Ruft den Kopf dieser Warteschlange ab, entfernt ihn jedoch nicht, löst eine Ausnahme aus, wenn die Warteschlange leer ist.
Beispielcode für die Implementierung von 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());
Ausgabe des Codes:
Hello
Hello
StackOverFlow
User
null
Sujit
Queue ist eine Schnittstelle in Java, das geht nicht.
Stattdessen haben Sie zwei Möglichkeiten:
Option 1:
Queue<Integer> Q = new LinkedList<>();
Option 2:
Queue<Integer> Q = new ArrayDeque<>();
Ich empfehle die Verwendung von Option2, da sie etwas schneller ist als die andere
drac_o
Warteschlange in Java ist als Schnittstelle definiert und viele gebrauchsfertige Implementierungen sind als Teil der JDK-Version vorhanden. Hier sind einige:
VerlinkteListePriority Queue, ArrayBlockingQueue, ConcurrentLinkedQueue, Linked Transfer Queue, Synchrone Warteschlange usw.
SO Sie können jede dieser Klassen erstellen und als Warteschlangenreferenz speichern. zum Beispiel
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);
}
}
Sie können auch Ihre eigene benutzerdefinierte Warteschlange implementieren, indem Sie die Warteschlangenschnittstelle implementieren.
Benötigen Sie eine Thread-sichere Warteschlange?
– Peter Lawrey
7. Januar 2011 um 16:40 Uhr
Queue
ist eine Schnittstelle. grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/…– Wurzelreisender
29. September 2017 um 15:11 Uhr