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