迭代期间,HashMap的get变为null

时间:2016-05-29 18:29:01

标签: hashmap

我用这种方法迭代HashMap:

   public  void printMap(Map mp) {
        Iterator it = mp.entrySet().iterator();
        while (it.hasNext()) {
        Map.Entry pair = (Map.Entry)it.next();
        System.out.println(pair.getKey() + " = " + pair.getValue() + " " + mp.get("objectId"));
    }
        it.remove(); // avoids a ConcurrentModificationException
    }

结果是:

Key1 = Value1 objectIDValue
Key2 = Value2 objectIDValue
objectId = objectIDValue objectIDValue
Key4 = Value4 null
Key5 = Value5 null
...

为什么mp.get(“objectId”)在传递密钥后变为null?

2 个答案:

答案 0 :(得分:0)

除非另一个线程删除该对,否则看起来不可能。这个方法是同时调用的吗?如果是,则it.remove()可能会删除对,因为HashMap广告订单迭代订单不保证相同。

答案 1 :(得分:0)

这很可能是一个并发问题。我会尝试使用线程安全的地图实现,例如ConcurrentHashMap。此外,您的方法将删除迭代中的最后一个条目,该条目可能会根据您选择的地图实现而更改。