我正在從事某些任務,偶然做錯了根據我但代碼執行並提供正確的結果。我感到有點驚訝,並且懷疑每個循環的所有這些是如何工作的。 示例(示例程序),Java爲每個循環工作
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.
}
現在我只想知道上面引用的每個循環的每一個背後發生了什麼。
我想知道技術方面,我知道我不能修改每個循環中的集合,但在某些情況下,上述說明它爲什麼?
您應該添加第二個循環,因爲迭代器保留對其創建列表的引用。賦值'mylist = new ArrayList()'對迭代器工作的數據沒有影響,因爲它改變了變量mylist而不是列表本身。 –
@ViktorSeifert同意。編輯我的答案:複製你的陳述。 –