List<String> list = new ArrayList<String>();
//使用foreach循环会抛出ConcurrentModificationException异常
for(String s : list) {
if(name.equals(s) {
list.remove(s);
}
}
因为foreach使用Iterator来遍历元素的, 每次元素开始遍历之前都会检查集合中的数据是否一致, 如果不一致则抛
ConcurrentModificationException
异常. 参考Arraylist的实现:
if (modCount != expectedModCount) {
throw new ConcurrentModificationException();
}
最好的解决方法是使用CopyOnWriteArrayList, CopyOnWriteArraySet实现,
List<String> list = new CopyOnWriteArrayList<String>();
list.add("Alpha");
list.add("Beta");
list.add("Cat");
list.add("Dog");
for (String s : list) {
if (!"".equals(s)) {
list.remove(s);
}
}