Как получить доступ к предыдущему / следующему элементу в ArrayList?

Я перебираю ArrayList следующим образом:

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

когда я это сделал, я никогда не думал, что мне нужно получить доступ к предыдущим и следующим элементам этого элемента. Теперь мой код огромен. Это стоит много, если я перепишу его:

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

4 ответов


нет, цикл for-each предназначен для абстракции Iterator<E>, который находится под капотом. Доступ к нему позволит вам получить предыдущий элемент:

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

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

но вы не можете сделать это напрямую с помощью for-each.


как ответ на заголовок, а не на вопрос(с учетом параллельных операций)...

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

вы можете получить доступ к любому элементу в ArrayList с помощью метода 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));
        }
    }
}

Я думаю, что нашел решение это просто на самом деле, но я не могу удалить этот пост уже потому, что у него есть ответы..

Я только что добавил T t = list.get(i); во втором for-loop весь остальной код остается неизменным.