- 1仅有删除操作时:
1,使用迭代器:iterator.remove();
2,用java.util.Collection.removeIf(Predicate<? super E>)
方法。如:
map.keySet().removeIf(key -> key == 1);
-
但是上述方法只适合在迭代时有删除操作,如果有更新或者新增等操作,还是会报ConcurrentModificationException的。我找了一些资料,找到一种方法,适用于迭代更新List,包括增删改,那就是用
ListIterator
迭代器2。但是对于Map和Set,还没有找到类似的办法。 -
我自己想到的不满意的兜底方法:
1,用ConcurrentHashMap(在https://leetcode.com/problems/letter-tile-possibilities试过没行), CopyOnWriteArrayList等并发安全的容器。程序的时空效率会差一点。
2, 对于Map,可用一个List保存所有Key,仅为遍历用,遍历和递归中修改时用原Map。e.g. Accepted2
3,新增一个新的容器,保存旧容器里想要的元素。e.g. Accepted1
方法2比方法3性能好一些。