14

我以这种方式遍历 ArrayList:

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

当我这样做时,我从没想过我必须访问这个元素的前一个和下一个元素。现在我的代码很大。如果我用以下方式重写它会花费很多:

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

5 回答 5

24

不,for-each 循环旨在抽象Iterator<E>引擎盖下的内容。访问它可以让您检索上一个元素:

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

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

但你不能直接用 for-each 来做。

于 2013-11-08T02:20:47.600 回答
5

作为对标题的回答,而不是问题(考虑到并发操作)......

T current;
T previous;
{
    ListIterator<T> lit = list.listIterator(index);
    current = lit.hasNext()?lit.next():null;
    previous = lit.hasPrevious()?lit.previous():null;
}
于 2016-08-19T17:20:07.960 回答
1

您可以使用 get(index) 方法访问 ArrayList 中的任何元素。

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));
        }
    }
}
于 2013-11-08T02:24:53.063 回答
1

我也找到了解决方案。接下来是。

接下来:letters.get(letters.indexOf(')')+1)

对于以前的:letters.get(letters.indexOf(')')-1)

于 2019-07-20T19:02:35.613 回答
0

我想我找到了解决方案,实际上它很简单,但我不能删除这篇文章,因为它有答案。

我只是T t = list.get(i);在第二个 for 循环中添加,所有其他代码保持不变。

于 2013-11-08T02:34:10.803 回答