Quand j'essaye:
Queue<Integer> q = new Queue<Integer>();
le compilateur me donne une erreur. De l'aide?
De plus, si je veux initialiser une file d'attente, dois-je implémenter les méthodes de la file d'attente?
Un Queue
est une interface, ce qui signifie que vous ne pouvez pas construire un Queue
directement.
La meilleure option consiste à construire une classe implémentant déjà l'interface Queue
, comme l'un des éléments suivants: AbstractQueue
, ArrayBlockingQueue
, ArrayDeque
, ConcurrentLinkedQueue
, DelayQueue
, LinkedBlockingQueue
, LinkedList
, PriorityBlockingQueue
, PriorityQueue
ou SynchronousQueue
.
Une alternative consiste à écrire votre propre classe qui implémente l'interface de file d'attente nécessaire. Cela n'est pas nécessaire, sauf dans les rares cas où vous souhaitez faire quelque chose de spécial tout en fournissant au reste de votre programme un 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 ...
}
Une alternative encore moins utilisée consiste à construire une classe anonyme qui implémente Queue
. Vous ne voulez probablement pas faire cela, mais il est répertorié comme une option pour couvrir toutes les bases.
new Queue<Tree>() {
public Tree element() {
...
};
public boolean offer(Tree element) {
...
};
...
};
Queue
est une interface. Vous ne pouvez pas instancier une interface directement, sauf via une classe interne anonyme. Généralement, ceci n'est pas ce que vous voulez faire pour une collection. Choisissez plutôt une implémentation existante. Par exemple:
Queue<Integer> q = new LinkedList<Integer>();
ou
Queue<Integer> q = new ArrayDeque<Integer>();
En règle générale, vous choisissez une implémentation de collection en fonction des performances et des caractéristiques de simultanéité qui vous intéressent.
Queue<String> qe=new LinkedList<String>();
qe.add("b");
qe.add("a");
qe.add("c");
Comme Queue
est une interface, vous ne pouvez pas en créer une instance comme vous l'avez illustré.
Queue est une interface, vous ne pouvez pas construire explicitement une file d'attente, vous devez instancier une de ses classes d'implémentation. Quelque chose comme:
Queue linkedList = new LinkedList();
L’interface Queue étend Java.util.Collection avec des opérations d’insertion, d’extraction et d’inspection supplémentaires, telles que:
+offer(element: E):
boolean // Insertion d'un élément
+poll(): E
// Récupère l'élément et renvoie NULL si la file d'attente est vide
+remove(): E
// Récupère et supprime l'élément et lève une exception si la file d'attente est vide
+peek(): E
// Récupère, mais ne supprime pas, la tête de cette file d'attente, renvoyant la valeur null si cette file d'attente est vide.
+element(): E
// Récupère, mais ne supprime pas, la tête de cette file d'attente lève une exception si la file d'attente est vide.
Exemple de code pour l'implémentation de la file d'attente:
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());
Sortie du code:
Hello
Hello
StackOverFlow
User
null
Queue est une interface en Java, vous ne pouvez pas le faire.
Au lieu de cela, vous avez deux options:
option 1:
Queue<Integer> Q = new LinkedList<>();
option 2:
Queue<Integer> Q = new ArrayDeque<>();
Je recommande d'utiliser option2 car il est un peu plus rapide que l'autre
File d'attente en Java est défini comme une interface et de nombreuses implémentations prêtes à l'emploi sont présentes dans la version du JDK. En voici quelques unes: LinkedList , File d'attente prioritaire, ArrayBlockingQueue, ConcurrentLinkedQueue, File d'attente de transfert liée, File d'attente synchrone etc.
SO Vous pouvez créer n’importe laquelle de ces classes et la conserver comme référence de file d’attente. par exemple
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);
}
}
Vous pouvez également implémenter votre propre interface personnalisée mettant en œuvre l'interface Queue.
Queue
est une interface en Java, vous ne pourriez pas le faire. essayer:
Queue<Integer> Q = new LinkedList<Integer>();