可是我输出没有异常啊?为什么呢?
2 回答
江户川乱折腾
TA贡献1851条经验 获得超5个赞
理论上来说,这种情况会引发异常java.util.ConcurrentModificationException 异常,
但是注意有个例外, 就是删除的是倒数第二个元素时, 不会抛出该异常.
1234567891011121314151617181920 | import 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循环遍历一边增删修改集合
添加回答
举报
0/150
提交
取消