Lors de l'utilisation de la file d'attente de plus de arraylist
Un argument de base pour l'utilisation d'une File d'attente sur une liste de tableaux, c'est que la File d'attente de garanties FIFO comportement.
Mais si j'ajoute 10 éléments à une liste de tableaux et ensuite effectuer une itération sur les éléments à partir de la 0e élément, puis je vais récupérer les éléments dans le même ordre qu'ils ont été ajoutés. Donc, essentiellement, ce qui garantit un FIFO comportement.
Ce qui est si spécial au sujet de la File d'attente par rapport à les ArrayList?
OriginalL'auteur Victor | 2013-07-02
Vous devez vous connecter pour publier un commentaire.
Si je vous ai donné un
Queue
exemple, alors vous savez que par itérative appelremove()
vous permettrait de récupérer les éléments dans l'ordre FIFO. Si je vous ai donné unArrayList
exemple, vous pouvez alors faire pas de cette garantie.Prendre le code suivant comme exemple:
Si j'étais maintenant vous donner cette liste, puis mon itération de 0 à 4, vous n'obtiendrez pas les éléments dans l'ordre FIFO.
Aussi, je dirais une autre différence est l'abstraction. Avec un
Queue
exemple, vous n'avez pas à vous soucier des indices et cela rend les choses plus facile de réfléchir si vous n'avez pas besoin de toutArrayList
a à offrir.OriginalL'auteur Lee Martie
Vous pouvez regarder le javadoc ici. La principale différence est un
List
vous permet de regarder n'importe quel élément à chaque fois que vous le souhaitez. Une file d'attente vous permet de regarder les "à côté".Penser à cela comme une vraie file d'attente ou comme une ligne pour la caisse à l'épicerie. Vous ne demandez pas le gars dans le milieu ou à la fin de payer ensuite, vous demandez toujours l'homme qui est à l'avant/été en attente la plus longue.
Il est intéressant de noter que certaines listes sont des files d'attente. Regardez LinkedList, par exemple.
Il dépend de la façon dont vous le regardez. Si vous essayez de mettre en œuvre une épicerie de ligne dans le code, un
ArrayList
serait ennuyeux car il n'est pas un moyen pour obtenir le prochain client dans un sens, c'est aussi pratique que d'unQueue
. Que vous avez à faireif (!list.isEmpty()) list.remove(0);
. Je préfère lire/écrirequeue.poll()
Pourquoi Arraylist ne peuvent pas obtenir le prochain client facilement? Nous venons de définir un itérateur et ne iter.next()
Ce n'est pas aussi simple, expressif et lisible que
queue.poll()
. Vous utiliser unArrayList
pour cela. Personne ne dit le contraire. C'est juste pas le bon outil pour le travail.OriginalL'auteur Daniel Kaplan
Les restrictions imposées sur une file d'attente (FIFO, pas d'accès aléatoire), comparé à une liste de tableaux, de permettre la structure de données pour être mieux optimisée, la simultanéité, et être plus approprié et plus propre conception, lorsqu'il est appelé pour.
En ce qui concerne l'optimisation et de la simultanéité, d'imaginer le scénario si un producteur est de remplir une file d'attente tandis que les consommateurs, il consomme. Si nous avons utilisé une liste de tableaux pour cette, puis dans l'implémentation naïve chaque suppression du premier élément serait la cause d'une opération de déplacement sur la liste de tableaux, afin de descendre tous les autres éléments. C'est très inefficace, en particulier dans un simultanées de mise en œuvre, car la liste serait verrouillé pour la durée de l'ensemble de l'opération de décalage.
En ce qui concerne la conception, si les articles sont accessibles en mode FIFO, puis en utilisant une file d'attente de communiquer automatiquement cette intention, tandis qu'une liste ne pas. Cette clarté de la communication permet de faciliter la compréhension du code, et peut rendre le code plus robuste et sans bug.
OriginalL'auteur Trevor Freeman
La différence est que pour une File d'attente, vous êtes assuré d'en tirer les éléments dans l'ordre FIFO. Pour une liste de tableaux, vous n'avez aucune idée de quel ordre les éléments ont été ajoutés. Selon la façon dont vous l'utilisez, vous pouvez appliquer la FIFO de commande sur une liste de tableaux. Je pourrais aussi la conception de l'enveloppe pour une File d'attente qui m'a permis de sortir de ce qui jamais de l'élément que je voulais.
Le point que j'essaie de faire, c'est que ces cours sont conçus pour être bon à quelque chose. Vous n'avez pas à les utiliser, mais c'est ce qu'ils sont conçus et optimisés pour. Les files d'attente sont très bons à l'ajout et la suppression d'éléments, mais mauvaise si vous avez besoin de faire une recherche. ArrayLists, d'autre part, sont un peu plus lent pour ajouter des éléments, mais de permettre facile d'accès aléatoire. Vous ne le verrez pas dans la plupart des applications que vous écrivez, mais il y a souvent une perte de performance pour le choix de l'un sur l'autre.
OriginalL'auteur specs
Oui!
J'aurais utilisé poll() et peek() méthodes dans la file d'attente qui renvoie la valeur ainsi que de les supprimer , de les examiner élément de tête, respectivement .Aussi Ces méthodes fournit une valeur spéciale null si l'opération échoue et ne déclenche une exception comme avec la méthode remove() va jeter nosuchelement exception.
Réf.: docs.oracle.com
OriginalL'auteur Ankish
Par exemple,
Queue
méthodespoll()
etremove()
récupère l'élément et de le supprimer de la File d'attente.Certains de la mise en œuvre de
Queue
interface (PriorityQueue
) permettent de définir une priorité pour les éléments et les récupère grâce à cette priorité. C'est beaucoup plus qu'une FIFO comportement dans ce dernier cas.OriginalL'auteur eternay
Envisager une situation dans laquelle les processus aléatoires mise à jour d'une liste de tableaux au hasard et nous sommes censés traiter en fifo?
Il n'y a absolument aucun moyen de le faire, mais de changer la structure de données de liste de tableaux à la file d'attente
OriginalL'auteur Muhammad Ahmed AbuTalib