2011-09-16 6 views
3

私はリストを持っていて、それを繰り返し処理する必要がある古いコードを使用する必要があります。 Foreachループが機能しません。これを行う最も安全な方法はどれですか?非ジェネリックリストを反復処理する最良の方法はどれですか?

private void process(List objects) { 
    someloop { 
     //do something with list item 
     //lets assume objects in the List are instances of Content class 
    }   
} 
+2

ないのはなぜforeachループの仕事? – mrkhrts

+0

リストから要素を削除する必要があるのか​​、* for-each *を使用できないようにする必要があるのでしょうか?どうか明らかにしてください。 –

+0

私はコンテンツクラス(オブジェクトではない)でforeachループを試していたので、それがうまくいきませんでした。私の間違い、私はそれを認識しませんでした。ありがとうございます – user219882

答えて

8

使用Iterator

Iterator iter = objects.iterator(); 
while (iter.hasNext()) { 
    Object element = iter.next(); 
} 

またはそれ以上の直接のfor-each:

for (Object obj : objects) { 
} 
+0

インターレーターは単純なfor()ループより効率的ですか? – mcfinnigan

+0

違いはありません。 For-eachはイテレータを内部で使用します。 –

3

どちらか削除できるようにする必要がある場合は、イテレータを使用リストの現在の要素:

for (Iterator it = list.iterator(); it.hasNext();) { 
    Foo foo = (Foo) it.next(); 
    // ... 
    it.remove(); 
} 

またはforeachループを使用します。

for (Object o : list) { 
    Foo foo = (Foo) o; 
    // ... 
} 
+0

固定。ありがとうございました。私はforループを使う方が好きです。なぜならiteratorの範囲をループに減らすからです。 –

+0

ええ、それは正当な理由です。 –

+0

it.remove()はなぜですか?その結果、いくつかのリスト実装で同時アクセス例外が発生する可能性がありますか? –

関連する問題