list集合在用iterator迭代時,修改集合長度, 不一定會引發異常
阿新 • • 發佈:2019-02-13
import java.util.ArrayList; import java.util.List; public class IteratorTest { public static void main(String[] args) { /* * list集合在用iterator迭代時,修改集合長度, 不一定會引發 * ConcurrentModificationException * 迭代器併發修改異常 */ List<String> list = new ArrayList<String>(); list.add("aa"); list.add("bb"); list.add("cc"); list.add("dd"); list.add("ee"); /* * list中有一個成員變數:modCount:這個機構被修改的次數 * 迭代器內部:有個一變數:excepedModCount:被期望的修改次數 * 當集合在修改元素時:modCount ++; * 當迭代器next()時,會判斷excepedModCount和modCount是否相等,不等會 * 引發異常 * chenckForComodification() */ for (String string : list) { if("aa".equals(string)) //list的長度從5->4 迭代器的hasNext()==false, 不會執行next() //所以不會引發異常 list.remove("bb"); System.out.println(string); } } }