/**
*在add方法和remove方法时modCount会自增一
- 简写ex = exceptedModCount
- 简写m= modCount
- 如下例子:
- m初始为0,经过add与remove后变为6
- ex初始是被m赋值的,所以excepted为6
- 但在while代码块中,arr集合进行了remove操作,modCount自增
- 使得exceptedModCount != modCount,抛出ConcurrentModificationException异常
*/
ArrayList<String> arr = new ArrayList<>();
//m++-->1
arr.add("h");
//m++-->2
arr.add("e");
//m++-->3
arr.add("l");
//m++-->4
arr.add("l");
//m++-->5
arr.add("o");
//m++-->6
arr.remove(1);
//exceptedModCount(被赋初值)-->6
Iterator<String> iterator = arr.iterator();
while (iterator.hasNext()) {
//ex == 6,,,m == 6
String str = iterator.next();
if (str.equals("h")) {
//ex == 6, m == 7,不相等
//在下次进入iterator.next()时,
// 会判断exceptedModCount是否等于modCount
//如果不相等,则抛出异常
arr.remove(0);
}
System.out.println(str);
}
``
//输出结果
h
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at Java_test.modCount_test.main(modCount_test.java:35)