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

java集合中如图所示会引发异常

java集合中如图所示会引发异常

PIPIONE 2018-07-05 10:10:48
可是我输出没有异常啊?为什么呢?
查看完整描述

2 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

理论上来说,这种情况会引发异常java.util.ConcurrentModificationException 异常,

但是注意有个例外, 就是删除的是倒数第二个元素时, 不会抛出该异常. 

1234567891011121314151617181920import java.util.ArrayList;public class Demo {     public static void main(String[] args) {        ArrayList<String> list = new ArrayList<String>();        list.add("A");        list.add("B");        list.add("C");        list.add("D");        list.add("E");         for (String temp : list) {            if ("D".equals(temp)) { //除了倒数第二个元素 "D" ,删除其余的元素都会抛出异常                list.remove(temp);            }        }         System.out.println(list);    }}

具体原因可以查看ArrayList等源码, 里面的源代码写了什么情况下会抛出ConcurrentModificationException 异常.

比如HashMap 在只有一个元素的时候, 边循环边删除也不抛出异常, 

但是特殊的例子, 没必要记.!!

因为写代码的时候 要尽量避免 一边增强for循环遍历一边增删修改集合


查看完整回答
反对 回复 2018-07-31
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

使用list的时候在倒数第二个元素删除其他元素不会异常
使用set的时候在倒数第一个元素删除其他元素不会异常

查看完整回答
反对 回复 2018-07-31
  • 2 回答
  • 0 关注
  • 629 浏览

添加回答

举报

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