Я бы предпочел использовать циклы for, как это, если это возможно, чтобы убедиться, что у меня нет неправильных индексов из-за опечаток или чего-то еще:
List<Enemy> enemies = new ArrayList<Enemy>;
for (Enemy enemy : enemies) {
...
}
Например, с помощью этого цикла:
for (int i = 0; i < enemies.size()-1; ++i)
Вы всегда оставите последнего "врага" нетронутым.
И затем, чтобы быть уверенным, что я не испорчу свои списки и итерации, я буду хранить ссылки на объекты, которые необходимо удалить, и удаляю их впоследствии, потому что я не уверен, что происходит при удалении элементов из коллекции. перебирая одну и ту же коллекцию. Поведение может зависеть от типа коллекции и реализации (коллекции).