It looks like Entity.tick() can remove itself from the entities list? If that's the case, then you would need to keep a separate list of entities that were deleted and delete them after running through the tick() loop. Alternately, if an entity can only ever delete itself, you could do a reverse 'for' loop (instead of a foreach) which would keep the removed item from affecting the tick() loop.