web-dev-qa-db-fra.com

Itérer dans la file d'attente d'objets dans l'ordre

J'ai créé une file d'attente contenant des objets que je souhaiterais parcourir dans l'ordre dans lequel ils ont été placés dans la file d'attente (premier objet placé en file d'attente, 2e objet placé en file d'attente, 3e objet ...)

J'ai vu un moyen de le faire en ligne, mais je ne suis pas sûr que cela garantisse que les objets de la file d'attente seront visités dans le bon ordre.

for(MyObject anObject : queue){
    //do someting to anObject...

Merci de votre aide.

10
user2268507

Cela dépend de l'implémentation Queue que vous utilisez.

Par exemple, LinkedList garantit que les itérations renverront les éléments dans l'ordre FIFO (insertion). En effet, il implémente l'interface Deque .

Mais d’une manière générale, ce n’est pas nécessairement le cas pour d’autres types de files d’attente.

Le javadoc for Queue déclare:

Les files d'attente classent généralement, mais pas nécessairement, les éléments de la manière FIFO (premier entré, premier sorti). Parmi les exceptions figurent les files d’attente de priorité, qui ordonnent les éléments en fonction d’un comparateur fourni, ou l’ordre naturel des éléments, et les queues LIFO (ou piles) qui ordonnent les éléments LIFO (dernier en premier). en dehors).

Il ajoute également:

Chaque implémentation de file d'attente doit spécifier ses propriétés de classement.

Il vous suffit donc de vérifier le javadoc de la file d'attente que vous utilisez et de trouver votre réponse.

3
assylias

Implémentez votre file d'attente en tant que LinkedList. Ensuite, vous pouvez parcourir vos objets dans l'ordre dans lequel ils ont été insérés. Vous devez déclarer le type d'objet à insérer dans la file d'attente afin d'éviter toute erreur. Vous pouvez le conserver en tant qu’objet et le spécifier en tant que file d’objets, votre code ci-dessus fonctionnerait. Voir ci-dessous.

Queue<Object> queue = new LinkedList<Object>();
// add your objects here
// EX: queue.add(new MyObject)

for(Object item : queue){
    System.out.println(item.toString());
}
10

Je pense qu'il est préférable d'utiliser ArrayList dans ce cas. S'il vous plaît essayez cela. Pourquoi voulez-vous utiliser uniquement la file d'attente?

0
Harish Kumar