1 package cn.rocker.list; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; 5 import java.util.List; 6 7 /** 8 * @ClassName: RemoveEleWhileIterator 9 * @Description: 集合在遍歷過程當中安全的刪除集合中的元素 10 * @author 112 11 * @date 2018年3月26日 上午11:33:31 12 */ 13 public class RemoveEleWhileIterator { 14 15 void init(List<Integer> list) { 16 list.clear(); 17 for (int i = 0; i < 10; i++) { 18 list.add(i + 1); 19 } 20 } 21 22 /** 23 * 移除方法一 24 * @param list 25 */ 26 void remove(List<Integer> list) { 27 for (int i = 0; i < 5; i++) { 28 list.remove(i); 29 } 30 } 31 32 33 /** 34 * 移除方法二 35 * @param list 36 */ 37 void removeTwo(List<Integer> list) { 38 for (int i : list) { 39 if (i < 6) { 40 list.remove(i); 41 } 42 } 43 } 44 45 46 /** 47 * 移除方法三 48 * @param list 49 */ 50 void removeThree(List<Integer> list) { 51 for (Iterator<Integer> iter = list.iterator(); iter.hasNext();) { 52 int i = iter.next(); 53 if (i < 6) { 54 iter.remove(); 55 } 56 } 57 } 58 59 60 public static void main(String[] args) { 61 RemoveEleWhileIterator testList = new RemoveEleWhileIterator(); 62 List<Integer> list = new ArrayList<Integer>(); 63 64 // 第一種方法 65 testList.init(list); 66 testList.remove(list); 67 System.out.println(list); 68 69 // 第二種方法 70 try { 71 testList.init(list); 72 testList.removeTwo(list); 73 System.out.println(list); 74 } catch (Exception e) { 75 e.printStackTrace(); 76 } 77 78 // 第三種方法 79 testList.init(list); 80 testList.removeThree(list); 81 System.out.println(list); 82 } 83 }
運行結果以下:java
[2, 4, 6, 8, 10]安全
java.util.ConcurrentModificationExceptionspa
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)code
at java.util.AbstractList$Itr.next(AbstractList.java:343)blog
[6, 7, 8, 9, 10]ip