我正在执行某些任务,但偶然根据我的说法做错了,但代码执行并提供了正确的结果。我一点都不惊讶,并且想到每个循环的所有这些是如何工作的。示例(示例程序),
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.
}
现在我只想知道上面引用的每个循环后面发生了什么。
我想知道技术方面,我知道我不能修改每个循环中的集合,但在上面提到的某些情况下它起作用了,为什么?