web-dev-qa-db-fra.com

Comment instancier un objet de file d'attente en java?

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?

137
WM.

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) {
     ...
   };
   ...
};
145
Edwin Buck

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.

144
Jon Skeet
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é.

42
Jigar Joshi

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();

H lien vers le tutoriel Java sur ce sujet.

14
zmf

enter image description here

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
11
devDeejay

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

6
Sujit

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.

5
Java Guru

Queue est une interface en Java, vous ne pourriez pas le faire. essayer:

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