我想使用此方法在HashMap中删除相同的名称,但是当我尝试编译我的代码时,我得到ConcurrentModificationException。
public static void removeTheFirstNameDuplicates(HashMap<String, String> map)
{
for (Map.Entry<String, String> pair : map.entrySet()){
String name = pair.getValue();
removeItemFromMapByValue(map, name);
}
}
答案 0 :(得分:2)
使用“增强”for循环时,例如:
for (Map.Entry<String, String> pair : map.entrySet()){
幕后有一个隐含的Iterator
,每次迭代都会给你一个pair
。 Section 14.14.2 of the JLS州:
增强的for语句相当于表单的基本for语句:
for (I #i = Expression.iterator(); #i.hasNext(); ) { VariableModifiersopt TargetType Identifier = (TargetType) #i.next(); Statement }
Iterator
如果有任何东西在迭代时修改集合,则会抛出ConcurrentModificationException
,除非你调用iterator's own remove()
method,这会移除当前元素。您必须使用明确的Iterator
:
Iterator<Map.Entry<String, String>> itr = map.entrySet().iterator();
while (itr.hasNext())
{
Map.Entry<String, String> pair = itr.next();
if (yourCriteriaIsMet)
{
itr.remove();
}
}
答案 1 :(得分:0)