Вы не можете изменять карту, пока проходите по ней. Вы должны либо сделать копию карты, либо использовать ConcurrentHashMap , либо использовать итератор . Если он находится в многопоточной среде, то вы можете выполнить изменение в синхронизированном блоке.
Другой вариант - использовать итератор .
Я переписал ваш цикл for с итератором ниже:
for(Iterator<Map.Entry<String, Entity>> iterator = entities.entrySet().iterator(); iterator.hasNext(); ){
Map.Entry<String, Entity> entry = iterator.next();
String key = entry.getKey();
Entity item = entry.getValue();
if (item.isDestroyed()){
//Notice using an iterator to remove
iterator.remove();
ViewManager.getInstance().removeItem(key);
//INSTRUCT THE ENTITY TO PERFORM IT'S DESTROYED BEHAVIOR item.Destroyed()
} else {
item.update(1);
ConsoleItem ci = new ConsoleItemImpl(item.getIdentifier(), item.getLocation(), ColorStringConverter.getInstance().StringToColor(item.getSide()), item.getAngle(), item.getShape(), item.toString(), item.isDestroyed(), item.isDamaged());
ViewManager.getInstance().updateItem(ci);
}
item.update(1);
}
Я не уверен в части непрерывного зацикливания HashMap. Хэш-карта имеет конечный набор ключей, поэтому вы обычно просматриваете набор ключей. Если по какой-то причине вы хотите выполнять непрерывный цикл, вам нужно сначала сообщить нам причину этого, а также терминальное состояние этого непрерывного цикла (это не может быть навсегда , не так ли?)