Java 试图避免并发修改异常

Java 试图避免并发修改异常,java,hashmap,Java,Hashmap,我试图避免并发修改异常。我在实体HashMap上循环以勾选()每个实体。玩家实体使用WASD输入在屏幕上移动,并测试addNewEntity()我调用的方法GameState.addNewEntity(新爆炸(true,this.x,this.y))当玩家向右移动时。几次爆炸出现在播放器上,然后我得到一个错误。玩家类扩展扩展实体的生物。爆炸扩展了实体类 此代码来自我的GameState类: private static HashMap<Integer, Entity> entitie

我试图避免并发修改异常。我在实体HashMap上循环以勾选()每个实体。玩家实体使用WASD输入在屏幕上移动,并测试
addNewEntity()
我调用的方法
GameState.addNewEntity(新爆炸(true,this.x,this.y))当玩家向右移动时。几次爆炸出现在播放器上,然后我得到一个错误。玩家类扩展扩展实体的生物。爆炸扩展了实体类

此代码来自我的GameState类:

private static HashMap<Integer, Entity> entities = new HashMap<Integer, Entity>();
private static HashMap<Integer, Entity> newEntities = new HashMap<Integer, Entity>();

player = new Player(game, true, 100, 100);
entities.put(0, player);
我的渲染方法:

public void render(Graphics g) {
    for (Entry<Integer, Entity> entry : entities.entrySet()) { 
        entry.getValue().render(g);
    }
}
public void渲染(图形g){
对于(条目:entities.entrySet()){
entry.getValue().render(g);
}
}
我试图通过添加到newEntities HashMap而不是添加到entities HashMap来避免并发修改异常。在我的tick方法中,我循环使用newEntities HashMap,将存在于其中的每个项目添加到实体中,然后依次删除每个项目。只有在这之后,我才能循环实体HashMap


如何可能在对映射进行迭代时修改它?

不允许在使用增强的for循环对映射进行迭代时直接从映射中删除条目。相反,使用显式迭代器进行迭代,以及迭代器的
remove()
方法

Iterator<Map.Entry<Integer, Entity>> iter = newEntities.entrySet().iterator();
while (iter.hasNext()) { 
    Map.Entry<Integer, Entity> entry = iter.next();
    entities.put(entities.size(), entry.getValue());
    iter.remove();
}
Iterator iter=newEntities.entrySet().Iterator();
而(iter.hasNext()){
Map.Entry=iter.next();
entities.put(entities.size(),entry.getValue());
iter.remove();
}

对第二个循环执行相同操作。

谢谢Eran。工作得很有魅力。
public void render(Graphics g) {
    for (Entry<Integer, Entity> entry : entities.entrySet()) { 
        entry.getValue().render(g);
    }
}
Iterator<Map.Entry<Integer, Entity>> iter = newEntities.entrySet().iterator();
while (iter.hasNext()) { 
    Map.Entry<Integer, Entity> entry = iter.next();
    entities.put(entities.size(), entry.getValue());
    iter.remove();
}