106 votes

Java: la Meilleure façon de parcourir une Collection (ici ArrayList)

Aujourd'hui j'ai été heureux de codage quand je suis arrivé à un morceau de code que j'ai déjà utilisé des centaines de fois:

L'itération sur une Collection (ici ArrayList)

pour certaines raisons, j'ai effectivement regardé lors de l'auto-complétion des options de Eclipse et il m'a demande:

Ce cas sont les suivants boucles mieux que les autres

le classique tableau de l'indice de boucle:

for (int i = 0; i < collection.length; i++) {
        type array_element = collection.get(index);

    }

l'Itérateur hasNext()/suivant():

    for (Iterator iterator = collection.iterator(); iterator.hasNext();) {
        type type = (type) iterator.next();

    }

et mon préféré, parce que c'est tellement simple à écrire:

    for (iterable_type iterable_element : collection) {

    }

112voto

MAK Points 12571

Le premier est utile lorsque vous avez besoin de l'index de l'élément. C'est en gros l'équivalent pour les deux autres variantes possibles pour ArrayLists, mais sera vraiment lent si vous utilisez un LinkedList.

La seconde est utile lorsque vous n'avez pas besoin de l'index de l'élément, mais pourrait avoir besoin de retirer les éléments que vous parcourez. Mais cela a l'inconvénient d'être un peu trop verbeux de l'OMI.

La troisième version est mon préféré. C'est court et fonctionne pour tous les cas où vous n'avez pas besoin d'indices ou de la sous-jacentes itérateur (c'est à dire que vous êtes seulement de l'accès aux éléments, et pas en les supprimant ou en modifiant l' Collection - ce qui est le cas le plus fréquent).

38voto

Suraj Chandran Points 12859

Tous ont leurs propres utilisations:

  1. Si vous avez un objet iterable et la nécessité de parcourir de manière inconditionnelle à tous:

    pour (iterable_type iterable_element : collection)

  2. Si vous avez un objet iterable mais faut conditionnelle de la traversée:

    for (Iterator iterator = collection.iterator(); iterator.hasNext();)

  3. Si la structure des données ne permet pas de mettre en œuvre itératif:

    for (int i = 0; i < collection.longueur; i++)

4voto

Rafe Kettler Points 29389

Aucun d'entre eux sont "mieux" que les autres. La troisième est, pour moi, plus lisible, mais pour quelqu'un qui n'utilise pas foreaches, ça peut paraître bizarre (ils préféreront peut-être la première). Tous les 3 sont assez clair pour quelqu'un qui comprenne Java, afin de choisir selon ce qui vous fait vous sentir mieux à propos du code.

Le premier est le plus fondamental, c'est donc le plus universel modèle (pour les tableaux, tous les iterables que je pense). C'est la seule différence je pense. Dans les cas plus compliqués (par exemple, vous devez disposer d'un accès à l'index actuel, ou vous avez besoin de filtrer la liste), le premier et le second cas pourrait faire plus de sens, respectivement. Pour le cas simple (objet itérable, pas d'exigences particulières), la troisième semble le plus propre.

Prograide.com

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.

Powered by:

X