iterando y eliminando de un mapa [duplicado]

Esta pregunta ya tiene una respuesta aquí:

Interando a través de una Colección, evitando ConcurrentModificationException al eliminar objetos en un bucle 23 respuestas

Estaba haciendo

for (Object key : map.keySet())
    if (something)
        map.remove(key);

que lanzó una ConcurrentModificationException, así que la cambié a:

for (Object key : new ArrayList<Object>(map.keySet()))
    if (something)
        map.remove(key);

esto, y cualquier otro procedimiento que modifique el mapa están en bloques sincronizados.

¿Hay una solución mejor?

si a nadie se le ocurre una solución mejor, primero para decir que no recibe la marca;)

Respuestas a la pregunta(12)

Su respuesta a la pregunta