2010-12-01 13 views
0

内部リストは違法であり、スローされます変更ConcurrentModificationException:これについて我々はすべてこれを知っている反復

for (Item i : theList) { 
if (i.num == 123) 
    foo(i); // foo modifies theList 
} 

しかし、何?

for (Item i : theList) { 
if (i.num == 123) { 
    foo(i); // foo modifies theList 
    break; 
} 
} 

ループが壊れているのでtheListsのイテレータのnextが呼び出される前に、何のConcurrentModificationExceptionはありません。しかしそれはそれを合法化するのだろうか?

+0

最初のものは違法ではありません - 'foo'はリストを変更するのではなく、リストから1つの項目のプロパティを多く変更します。 'foo(theList)'はリストに構造的な変更を加える機会があります。 –

+0

実際にはリストを変更して、それを削除します。 –

+0

fooのコードを教えてください。 –

答えて

1

もう少し考えた後、私はそれがあると結論づけました。 「溶液」

for (Item i : theList) { 
if (i.num == 123) { 
    theI = i; 
    break; 
} 
} 
foo(theI); // foo modifies theList 

しかし呼ばれる頻度nextの面で

が、それはまったく同じだだろう。

+0

もう一度、 "list"( 'theList')は変更せず、許可されているリストの要素は1つだけ変更します。 –

関連する問題