Quand j'essaie :
Queue<Integer> q = new Queue<Integer>();
le compilateur me donne une erreur. Vous pouvez m'aider ?
De même, si je veux initialiser une file d'attente, dois-je mettre en œuvre les méthodes de la file d'attente ?
Quand j'essaie :
Queue<Integer> q = new Queue<Integer>();
le compilateur me donne une erreur. Vous pouvez m'aider ?
De même, si je veux initialiser une file d'attente, dois-je mettre en œuvre les méthodes de la file d'attente ?
Queue
est une interface. Vous ne pouvez pas instancier une interface directement, sauf via une classe interne anonyme. En général, cette 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>();
o
Queue<Integer> q = new ArrayDeque<Integer>();
En général, vous choisissez une implémentation de collection en fonction des caractéristiques de performance et de concurrence qui vous intéressent.
Desde ArrayDeque : "Cette classe est susceptible d'être plus rapide que Stack lorsqu'elle est utilisée comme une pile, et plus rapide que LinkedList lorsqu'elle est utilisée comme une file d'attente". Cela est dû à une localisation des données favorable au cache du CPU et à des allocations moins fréquentes.
A Queue
est une interface, ce qui signifie qu'il est impossible de construire un fichier Queue
directement.
La meilleure option est de construire à partir d'une classe qui implémente déjà l'option Queue
comme l'une des suivantes : AbstractQueue
, ArrayBlockingQueue
, ArrayDeque
, ConcurrentLinkedQueue
, DelayQueue
, LinkedBlockingQueue
, LinkedList
, PriorityBlockingQueue
, PriorityQueue
ou SynchronousQueue
.
Une alternative est d'écrire votre propre classe qui implémente l'interface Queue nécessaire. Elle 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 une interface de type 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 est de construire une classe anonyme qui implémente Queue
. Vous n'avez probablement pas envie de faire cela, mais c'est une option pour couvrir toutes les bases.
new Queue<Tree>() {
public Tree element() {
...
};
public boolean offer(Tree element) {
...
};
...
};
Oh là là... J'ai peur que quelqu'un lisant ceci utilise un anonyme Queue
... mais +1 quand même.
En fait, celle de Jon est plus claire. Je veux bien +1 si vous le mettez à jour pour mentionner la concurrence et vous débarrasser du code des classes anonymes... Je pense que cela rend la réponse plus confuse pour quelqu'un qui veut savoir ce qu'il faut faire parce qu'il ne veut presque sûrement pas faire ça. (Même s'ils voulaient leur propre classe, il n'y a pas besoin de la rendre anonyme)
@Tom n'a pas supprimé l'info sur la classe anonyme car il est bon de savoir que c'est possible, mais j'ai ajouté le "Ecrivez votre propre implémentation" avant, ce qui l'éloigne encore plus des premières alternatives listées (plus courantes).
Queue<String> qe=new LinkedList<String>();
qe.add("b");
qe.add("a");
qe.add("c");
Depuis Queue
est une interface, vous ne pouvez pas créer une instance de celle-ci comme vous l'avez illustré.
java.util.Queue
est une interface. Vous ne pouvez pas instancier les interfaces. Vous devez créer une instance d'une classe implémentant cette interface. Dans ce cas, une LinkedList est une telle classe.
Merci @JigarJoshi ! !! y a-t-il un moyen de faire la même chose avec stack ? Je n'ai rien trouvé.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
2 votes
La file d'attente doit-elle être thread safe ?
1 votes
Queue
est une interface. grepcode.com/file/repository.grepcode.com/java/Root/jdk/openjdk/