【问题标题】:How can I access the previous/next element in an ArrayList?如何访问 ArrayList 中的上一个/下一个元素?
【发布时间】:2013-11-19 22:56:35
【问题描述】:

我以这种方式遍历 ArrayList:

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

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

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

【问题讨论】:

  • 查看可以翻译这两种方法的代码清理工具。
  • 1) 不要删除帖子,这不是 Stack Overflow 的工作方式。 2) 将您的答案添加到现有的答案列表中,并接受它 - 这样我们就知道它已经解决了。
  • @Makoto 好的,谢谢,很高兴知道。

标签: java for-loop arraylist


【解决方案1】:

不,for-each 循环旨在抽象出底层的 Iterator&lt;E&gt;。访问它可以让您检索上一个元素:

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

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

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

【讨论】:

  • 这不会跳过最后一项吗?
  • 在第一个索引处调用 previous() 方法会发生什么?
  • 来自文档 - (注意交替调用 * 到 {next} 和 {previous} 将重复返回相同的 * 元素。)
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    您可以使用 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));
            }
        }
    }
    

    【讨论】:

    • @xenteros O(n^2) 是从哪里来的? ArrayList.get(int) 是 O(1)
    • @antak 有时候我不知道 :)
    【解决方案4】:

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

    下一个:letters.get(letters.indexOf(')')+1)

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

    【讨论】:

    • 你好 Kenzo1,你应该看看 Markdown 语法来很好地格式化你的答案。
    【解决方案5】:

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

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

    【讨论】:

    • 它使您的算法更加复杂。使用迭代器,访问上一个/下一个元素是 O(1),使用 get() 是 O(n)。
    猜你喜欢
    • 2020-07-21
    • 2010-09-24
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多