私は特定のタスクに取り組んでいましたが、偶然にも私によれば何か間違ったことをしましたが、コードが実行されて正しい結果が得られました。私は少し驚き、これらすべての for each ループがどのように機能するのか疑問に思っていました。例(サンプルプログラム)、
public static void main( String[] args )
{
String myInput = "hello , hi , how are you ";
String[] splitted = myInput.split(",");
List<String> mylist = new ArrayList<String>();
for (String output : splitted)
{
mylist.add(output);
}
for (String output : mylist)
{
System.out.println(output);
mylist = new ArrayList<String>(); //It worked
mylist.add(output);
}
for (String output : splitted)
{
mylist.add(output);
}
for (String output : mylist)
{
System.out.println(output);
mylist.add(output); // After this line it threw exception java.util.ConcurrentModificationException
}
}
知りたかったのですが、検索中に、イテレータアプローチを使用するとリストから要素を削除できるという別の投稿を見つけたので、試してみました。
for (String output : splitted)
{
mylist.add(output);
}
for (Iterator iterator2 = mylist.iterator(); iterator2.hasNext();)
{
String string = (String) iterator2.next();
System.out.println(string);
iterator2.remove(); //It worked but if I used the same thing to remove element from original list it threw exception.
}
上記で引用した every for each ループの背後で何が起こっているのかを知りたいだけです。
技術的な側面を知りたいのですが、 for each ループでコレクションを変更できないことはわかっていますが、上記のいくつかのケースでそれが機能したのはなぜですか?