如何访问ArrayList中的上一个/下一个元素?

nom*_*nom 11 java for-loop arraylist

我以这种方式遍历ArrayList:

for (T t : list){
  ...
}
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我从未想过我必须访问此元素的上一个和下一个元素.现在我的代码很庞大.如果我用以下内容重写它会花费很多:

for (int i = 0; i < list.size(); i++){
  ...
}
Run Code Online (Sandbox Code Playgroud)

Jac*_*ack 21

不,for-each循环用于抽象Iterator<E>引擎盖下的内容.访问它将允许您检索前一个元素:

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

while (it.hasNext()) {
  T t = it.next();
  T prev = it.previous();
}
Run Code Online (Sandbox Code Playgroud)

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

  • 来自文档 - (注意,交替调用*到{next}和{previous}将重复返回相同的*元素.) (3认同)
  • 在第一个索引调用previous()方法时会发生什么? (2认同)

rnd*_*Str 5

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

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


nom*_*nom 1

我认为我找到了解决方案,事实上它很简单,但我无法删除这篇文章,因为它有答案。

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

  • 它使你的算法变得更加复杂。使用迭代器,访问上一个/下一个元素的时间复杂度为 O(1),使用 get() 的时间复杂度为 O(n)。 (2认同)