Java8 foreach

来源:互联网 发布:伊迪芬奇的秘密知乎 编辑:程序博客网 时间:2024/06/06 18:56

7.【强制】不要在foreach循环里进行元素的remove/add操作。remove元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁。
正例:

Iterator<String> it = a.iterator();while (it.hasNext()) {    String temp = it.next();    if (删除元素的条件) {        it.remove();    }} 

反例:

List<String> a = new ArrayList<String>();a.add("1");a.add("2");for (String temp : a) {    if ("1".equals(temp)) {        a.remove(temp);    }}

说明:以上代码的执行结果肯定会出乎大家的意料,那么试一下把“1”换成“2”,会是同样的结果吗?

首先查看为“1”时的结果:

[2]

将“1”修改为“2”的结果:

Exception in thread "main" java.util.ConcurrentModificationException    at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)    at java.util.ArrayList$Itr.next(ArrayList.java:851)    at com.htouhui.sms.yrzt.Main.main(Main.java:16)
原创粉丝点击