iterando e removendo de um mapa [duplicado]

Esta pergunta já tem uma resposta aqui:

Iterando através de uma coleção, evitando ConcurrentModificationException ao remover objetos em um loop 3 respostas

Eu estava fazendo

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

que lançou uma ConcurrentModificationException, então eu mudei para:

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

e todos os outros procedimentos que modificam o mapa estão em blocos sincronizado

Existe uma solução melhor

se ninguém encontrar uma solução melhor, primeiro a dizer que não recebe o sinal;)

questionAnswers(12)

yourAnswerToTheQuestion