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

可是我输出没有异常啊?为什么呢?

PIPIONE
浏览 630回答 2
2回答

江户川乱折腾

理论上来说,这种情况会引发异常java.util.ConcurrentModificationException 异常,但是注意有个例外, 就是删除的是倒数第二个元素时, 不会抛出该异常.&nbsp;1234567891011121314151617181920import&nbsp;java.util.ArrayList;public&nbsp;class&nbsp;Demo&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayList<String>&nbsp;list&nbsp;=&nbsp;new&nbsp;ArrayList<String>();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add("A");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add("B");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add("C");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add("D");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add("E");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(String&nbsp;temp&nbsp;:&nbsp;list)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;("D".equals(temp))&nbsp;{&nbsp;//除了倒数第二个元素&nbsp;"D"&nbsp;,删除其余的元素都会抛出异常&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.remove(temp);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(list);&nbsp;&nbsp;&nbsp;&nbsp;}}具体原因可以查看ArrayList等源码, 里面的源代码写了什么情况下会抛出ConcurrentModificationException 异常.比如HashMap 在只有一个元素的时候, 边循环边删除也不抛出异常,&nbsp;但是特殊的例子, 没必要记.!!因为写代码的时候 要尽量避免 一边增强for循环遍历一边增删修改集合

ABOUTYOU

使用list的时候在倒数第二个元素删除其他元素不会异常使用set的时候在倒数第一个元素删除其他元素不会异常
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java