凡不是就着泪水吃过面包的人是不懂得人生之味的人------歌德
我们在list循环中调用remove函数删除自身元素可能会导致java.util.ConcurrentModificationException
例如
|-----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 | hljs java // 构造从0到20的list List<Integer> list = Stream.iterate(0, i -> ++i).limit(20).collect(Collectors.toList()); // 删除 list.forEach(list::remove); |
首先我们可以使用removeIf代替
|-----------|---------------------------------------------------|
| 1 | hljs java list.removeIf(i -> i.equals(i)); |
其次我们可以使用迭代器
我们可以看到removeIf的源码正是使用了迭代器

如下
|-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 | hljs java Iterator<Integer> iterator = list.iterator(); while (iterator.hasNext()) { Integer nowNumber = iterator.next(); iterator.remove(); } |
在无法使用removeIf的场景下即可使用Iterator下的remove()方法
51工具盒子