私は、レストランオブジェクトを格納するarraylistを繰り返し処理しようとしていますが、ループは5つの要素のうち3つしか通過しないという問題があります。ループ全体がループしていない
私が説明するための試験方法作成:テストはそれに5つの食堂オブジェクトを持つことになります。ここ
public void testLoop() {
ArrayList<Eatery> test = new ArrayList<Eatery>();
test = eateriesListDefault;
for(Eatery e : test) {
MyLog.e(TAG, "Name: " + e.getName());
}
for (int i = 0; i < eateriesListDefault.size(); i++) {
MyLog.e(TAG, "Name " + test.get(i).getName());
test.remove(i);
}
for(Eatery e : test) {
MyLog.e(TAG, "Name " + e.getName());
}
}
を。最初のループは5つの名前のうち5つを正常に表示します。 2番目のループは3つの飲食店を削除するだけなので、最後のループは2つの名前を表示します。
私は、しかし私は、同時アクセスのエラーを取得し、第二のループの代わりに
for(Eatery e : eateriesListDefault) {
MyLog.e(TAG, "Name: " + e.getName());
test.remove(e);
}
を使用して試してみました。
誰かが私が間違っていることを知っていますか?
まず第一に、あなたはいけませんコレクションから値を削除しようとするときに 'foreach'ループを使います。これが同時アクセスエラーの原因です。 [このページ](http://docs.oracle.com/javase/tutorial/collections/interfaces/collection.html)を参照してください。次の行に代入を作成するためだけに 'new ArrayList'コールを発行する理由についても説明できますか? – Grambot
eateriesListDefaultはどのように見えますか?おそらく、最初のループとして「for(Eatery e:test)」の代わりに、2回目のループを模倣してみて、リンゴとリンゴを比較することができます。インデックス作成の問題を排除しようとしています。 – dispake