测试当 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
提交
取消