wake-up-neo.com

Wie instanziiere ich ein Queue-Objekt in Java?

Wenn ich versuche:

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

der Compiler gibt mir einen Fehler. Irgendeine Hilfe?

Auch wenn ich eine Warteschlange initialisieren möchte, muss ich die Methoden der Warteschlange implementieren?

137
WM.

Ein Queue ist eine Schnittstelle, dh Sie können ein Queue nicht direkt erstellen.

Die beste Möglichkeit besteht darin, eine Klasse zu konstruieren, die die Schnittstelle Queue bereits wie folgt implementiert: 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. Dies ist nur in den seltenen Fällen erforderlich, in denen Sie etwas Besonderes tun möchten, während Sie den Rest Ihres Programms mit einem Queue versehen.

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 ist die Erstellung einer anonymen Klasse, die Queue implementiert. Sie möchten dies wahrscheinlich nicht tun, aber es wird als Option aufgeführt, um alle Basen abzudecken.

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

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

Queue ist eine Schnittstelle. Sie können eine Schnittstelle nur über eine anonyme innere Klasse direkt instanziieren. In der Regel ist dies ist nicht das, 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 Auflistungsimplementierung anhand der gewünschten Leistungs- und Parallelitätsmerkmale aus.

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

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

Da Queue eine Schnittstelle ist, können Sie keine Instanz davon erstellen, wie Sie es dargestellt haben

42
Jigar Joshi

Queue ist eine Schnittstelle. Sie können eine Queue nicht explizit erstellen. Sie müssen eine der implementierenden Klassen instanziieren. So etwas wie:

Queue linkedList = new LinkedList();

H Hier ist ein Link zum Java Tutorial zu diesem Thema.

14
zmf

enter image description here

Die Queue-Schnittstelle erweitert Java.util.Collection um zusätzliche Einfüge-, Extraktions- und Inspektionsoperationen wie:

+offer(element: E): boolean // 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, 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 und 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
11
devDeejay

Queue ist eine Schnittstelle in Java, das kann man 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 diese etwas schneller ist als die andere

6
Sujit

Warteschlange in Java ist als Schnittstelle definiert und viele einsatzbereite Implementierungen sind im Rahmen der JDK-Version vorhanden. Hier sind einige: LinkedList , Priority Queue, ArrayBlockingQueue, ConcurrentLinkedQueue, Linked Transfer Queue, Synchronous Queue 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 Warteschlangenimplementierungs-Warteschlangenschnittstelle implementieren.

5
Java Guru

Queue ist eine Schnittstelle in Java, das konnte man nicht. Versuchen:

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