java中,遍历ArrayList的同时删除元素
测试当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
-----------------
真是奇怪?!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
看了一下,还是忘了Vector的存在吧
请使用 Iterator
ArrayList在遍历时删除某个元素后需要立即break, 否则就会抛出这个异常。
类的源码木有看,可能是删除后对象结构改变,而你还在以删除前的结构遍历输出,删除后对象长度改变,导致遍历时数组越界引发异常,而在遍历过程中添加元素是不会造成这个后果滴,它在过程当中也不会输出来。
不能在遍历的同时 又删除元素
建议看看ArrayList的源码,一目了然。
ArrayList在遍历时删除某个元素后需要立即break, 否则就会抛出这个异常。
类的源码木有看,可能是删除后对象结构改变,而你还在以删除前的结构遍历输出,删除后对象长度改变,导致遍历时数组越界引发异常,而在遍历过程中添加元素是不会造成这个后果滴,它在过程当中也不会输出来。
各位大侠给下各自的看法
想遍历又想删除,你应该倒着来
嗯,从代码层次看就是这样了
+1
当使用Iterator来迭代访问Collection集合时(ArrayList实现了Collection接口),Collection集合元素是不允许直接增删的,要使用Iterator对象的it.remove()方法才行,否则就会抛出.ConcurrentModificationException异常