Java8 foreach

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ksdb0468473/article/details/73106710

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)

猜你喜欢

转载自blog.csdn.net/ksdb0468473/article/details/73106710
今日推荐