首页 > 解决方案 > 为什么在迭代 HashMap 时在 IF 块中添加元素会起作用?

问题描述

为什么在IF使用迭代器迭代块时将元素添加到 HashMap 中可以在块内工作?

    HashMap<Integer, Integer> map = new HashMap<>();  
    map.put(1, 1);  
    map.put(2, 2);  
    map.put(3,3);  
      
    Iterator<Integer> it = map.keySet().iterator();  
    while(it.hasNext()) {  
        Integer key = it.next();  
        System.out.println("Map Value:" + map.get(key));  
        if (key.equals(2)) {  
            map.put(1, 4);                                 // Works, Why?
        }  
        //map.put(5, 5);                                   // ConcurrentModificationException, as expected
    } 

请指出任何重复项,如果有,我将删除此问题。

标签: java

解决方案


如果您添加一个新键以使地图的大小更大,那么您只是在地图内部更新键的值1。因此,您正在修改大小并且迭代器失败。if5

一般而言:如果您想比较一个调用有效而另一个无效的原因,请确保您使用的是具有相同参数的完全相同的调用。所以map.put(1,4)将在 if 之外工作。


推荐阅读