0

Javaのイテレータについて知りたいです。同時変更例外をスローするように設計されているのはなぜですか? C++ STL では、コンテナーを反復処理して、必要に応じて変更を加えることができますが、なぜ Java ではそれができないのでしょうか?

編集:質問を修正しました。誤ってフレーム化されました。

4

3 に答える 3

-2

なぜこのように設計されているかを説明する代わりに、次の小さな秘密を紹介します。

反復中にリストから削除すると、同時例外が発生します。反復中に反復子を使用して削除すると、他の理由で同時例外が発生する可能性があります。

このようなもの

for(Iterator<?> iter = list.getIterator(); iter.hasNext(); )
{ 
   MyClass c = iter.getNext();
   if( //i need to remove this instance)
      iter.remove(iter);
}

呼び出しをラップするsynchronizedか、変数を次のようにマークするvolatileと、オブジェクトへのアクセスが同期され、複数のソースから同時にアクセスできなくなるため、同時変更を回避するのに役立ちます。

または [COW リスト] を使用 ( http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/CopyOnWriteArrayList.html )

今日、SO にリンクする方法がわかりません....

于 2013-05-16T15:49:15.110 に答える