1.在迭代過程當中,用list來刪除元素的坑java
1 package test; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; 5 import java.util.List; 6 7 public class IteratorTest { 8 9 public static void main(String[] args) { 10 List<String> list = new ArrayList<>(); 11 list.add("hello"); 12 list.add("world"); 13 list.add("helloworld"); 14 15 for(Iterator<String> i = list.iterator(); i.hasNext();) { 16 17 /** 18 * Iterator裏有維護2個變量 cursor(表示當前的數組的索引值)、lastRet(表示上一個元素的索引值) 19 * 就是說,迭代器獲取值(next()方法)的時候,其實執行的就是list.get(cursor) 20 * 21 * 而arraylist裏,維護了個變量——modCount,表示的是list的修改次數(增長、修改、刪除的次數), 22 * 在Iterator裏,又維護了個變量——exoectedModCount,它的初始值就是list的modCount 23 * 在Iterator的next()方法裏,會檢查modCount是否等於exoectedModCount,不相等,將拋出異常 24 * 在調用了list.remove方法以後,modCount值加了1,可是沒反映到Iterator,報錯 25 */ 26 String s = i.next(); // 第二次執行到這裏的時候,會拋異常 27 System.out.println(s); 28 29 list.remove("helloworld"); 30 } 31 32 33 List<String> list2 = new ArrayList<>(); 34 list2.add("hello"); 35 list2.add("world"); 36 list2.add("helloworld"); 37 38 for (int i = 0; i < list.size(); i++) { 39 // 這裏想刪除所有元素,是錯誤的 40 // 這裏刪除了元素之後,會影響list.size()的取值,list.size()會一直減少 41 list.remove(i); 42 } 43 44 } 45 46 }