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++){
...
}
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.
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.
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;
}
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));
}
}
}