为了账号安全,请及时绑定邮箱和手机立即绑定

为什么再添加一个元素【如 al.add ("two");】反而没有抛出 异常了?

为什么再添加一个元素【如 al.add ("two");】反而没有抛出 异常了?

aluckdog 2023-03-31 18:14:54
测试当 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异常

查看完整回答
反对 回复 2023-04-03
?
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);


查看完整回答
反对 回复 2023-04-03
?
BIG阳

TA贡献1859条经验 获得超6个赞

ArrayList在遍历时删除某个元素后需要立即break, 否则就会抛出这个异常。 

类的源码木有看,可能是删除后对象结构改变,而你还在以删除前的结构遍历输出,删除后对象长度改变,导致遍历时数组越界引发异常,而在遍历过程中添加元素是不会造成这个后果滴,它在过程当中也不会输出来。


查看完整回答
反对 回复 2023-04-03
  • 3 回答
  • 0 关注
  • 120 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信