測試當 List 下只有一個元素時,在 Iterator 遍歷過程中使用非 iterator.remove () 方式刪除public class HashMapTest { public static void main(String[] args) { ArrayList<String> al = new ArrayList<String>(); al.add("one"); System.out.println(al); Iterator<String> it = al.iterator(); while (it.hasNext()) { System.out.println(it.next()); al.remove("one"); } }}運行結果:拋出 java.util.ConcurrentModificationException 異常------------------再添加一個元素【如 al.add ("two");】反而沒有拋出 java.util.ConcurrentModificationException 異常了。運行結果:[one, two]one-----------------真是奇怪?!
3 回答

慕無忌1623718
TA貢獻1744條經驗 獲得超4個贊
當使用Iterator來迭代訪問Collection集合時(ArrayList實現了Collection接口),Collection集合元素是不允許直接增刪的,要使用Iterator對象的it.remove()方法才行,否則就會拋出.ConcurrentModificationException異常

HUH函數
TA貢獻1836條經驗 獲得超4個贊
想遍歷又想刪除,你應該倒著來
ArrayList<String> list = new ArrayList<String>(); list.add("one"); int n = list.size(); for (int i = n - 1; i >= 0; i--) { if (list.get(i).equals("one")) { list.remove(i); } } System.out.println(list);

BIG陽
TA貢獻1859條經驗 獲得超6個贊
ArrayList在遍歷時刪除某個元素后需要立即break, 否則就會拋出這個異常。
類的源碼木有看,可能是刪除后對象結構改變,而你還在以刪除前的結構遍歷輸出,刪除后對象長度改變,導致遍歷時數組越界引發異常,而在遍歷過程中添加元素是不會造成這個后果滴,它在過程當中也不會輸出來。
添加回答
舉報
0/150
提交
取消