web-dev-qa-db-fra.com

Comment puis-je accéder à l'élément précédent/suivant dans une ArrayList?

Je parcoure une liste de tableaux de cette façon:

for (T t : list){
  ...
}

Quand j'ai fait cela, je n'ai jamais pensé devoir accéder aux éléments précédents et suivants de cet élément. Maintenant, mon code est énorme. Cela coûte cher si je le réécris avec:

for (int i = 0; i < list.size(); i++){
  ...
}
10
nomnom

Je pense avoir trouvé la solution simple, mais je ne peux pas supprimer ce message car il contient des réponses.

Je viens d'ajouter T t = list.get(i); dans la seconde boucle for, tous les autres codes restent inchangés.

0
nomnom

Non, la boucle for-each est censée résumer le Iterator<E> qui se trouve sous le capot. Son accès vous permettrait de récupérer l’élément précédent:

ListIterator<T> it = list.listIterator();

while (it.hasNext()) {
  T t = it.next();
  T prev = it.previous();
}

mais vous ne pouvez pas le faire directement avec le pour-chacun.

21
Jack

En réponse au titre, plutôt que la question (avec des considérations sur les opérations simultanées) ...

T current;
T previous;
{
    ListIterator<T> lit = list.listIterator(index);
    current = lit.hasNext()?lit.next():null;
    previous = lit.hasPrevious()?lit.previous():null;
}
4
rndStr

Vous pouvez accéder à n’importe quel élément dans ArrayList en utilisant la méthode get (index).

import Java.util.ArrayList;


public class Test {
    public static void main(String[] args) {
        ArrayList<Integer> array = new ArrayList<Integer>();

        array.add(1);
        array.add(2);
        array.add(3);

        for(int i=1; i<array.size(); i++){
            System.out.println(array.get(i-1));
            System.out.println(array.get(i));
        }
    }
}
1
Pedro Vítor