ConcurrentModificationException,我想删除hashmap值中的相同名称

时间:2014-02-21 23:28:42

标签: java iterator hashmap

我想使用此方法在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);
        }

    }

2 个答案:

答案 0 :(得分:2)

使用“增强”for循环时,例如:

for (Map.Entry<String, String> pair : map.entrySet()){

幕后有一个隐含的Iterator,每次迭代都会给你一个pairSection 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)