web-dev-qa-db-ja.com

ArrayListの前/次の要素にアクセスするにはどうすればよいですか?

このようにArrayListを繰り返し処理します。

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

これを行ったとき、この要素の前の要素と次の要素にアクセスする必要があるとは考えていませんでした。今、私のコードは巨大です。次のように書き換えると、費用がかかります。

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

私はそれが実際には簡単な解決策を見つけたと思いますが、答えがあるため、この投稿をすでに削除することはできません。

2番目のforループにT t = list.get(i);を追加しましたが、他のすべてのコードは変更されません。

0
nomnom

いいえ、for-eachループは、内部にあるIterator<E>を抽象化するためのものです。それにアクセスすると、前の要素を取得できます:

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

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

しかし、for-eachで直接行うことはできません。

21
Jack

質問ではなく、タイトルへの回答として(同時操作を考慮して)...

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

メソッド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));
        }
    }
}
1
Pedro Vítor

私も解決策を見つけました。次でした。

次の場合:letters.get(letters.indexOf(')')+1)

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

1
Kenzo1