注意:不是這個問題的重複:Why am I not getting a java.util.ConcurrentModificationException in this example?。問題是,爲什麼例外不是被拋出。List.remove奇怪的行爲
如果我們用List<String>
foreach
並嘗試從它,然後它拋出java.util.ConcurrentModificationException
但爲什麼下面的代碼不拋出同樣的異常,也不能處理的User
第二對象中刪除任何元素?
public class Common {
public static void main(String[] args) {
User user1 = new User();
user1.setFirstname("Vicky");
user1.setLastname("Thakor");
User user2 = new User();
user2.setFirstname("Chirag");
user2.setLastname("Thakor");
List<User> listUser = new ArrayList<User>();
listUser.add(user1);
listUser.add(user2);
int count = 0;
for (User user : listUser) {
System.out.println(count + ":" + user.getFirstname()+" "+ user.getLastname());
count++;
listUser.remove(user);
}
}
}
輸出是:
0:玉萍Thakor
ArrayList的迭代器應該是一個失敗的快速迭代器,也許你只是沒有看到異常。此外,將示例更改爲每個人都可以編譯和運行的代碼可能會更好(不確定「User」是什麼)。從ArrayList的文檔中可以看出:'這個類的迭代器和listIterator方法返回的迭代器是快速失敗的:如果迭代器創建後隨時通過結構修改列表,除了通過迭代器自己的remove或add方法之外,迭代器會拋出一個ConcurrentModificationException.' – NESPowerGlove 2014-12-04 21:45:03