我用这种方法迭代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?
答案 0 :(得分:0)
除非另一个线程删除该对,否则看起来不可能。这个方法是同时调用的吗?如果是,则it.remove()
可能会删除对,因为HashMap
的广告订单和迭代订单不保证相同。
答案 1 :(得分:0)
这很可能是一个并发问题。我会尝试使用线程安全的地图实现,例如ConcurrentHashMap
。此外,您的方法将删除迭代中的最后一个条目,该条目可能会根据您选择的地图实现而更改。