2014-06-18 3 views
0

Предполагая, что я знаю, ключ, можно удалить его, когда итерациюМожно ли удалить запись HashMap при повторении ее значений?

for (ExampleClass e : map.values()) { 
    if (condition) { 
     map.remove(key); 
    } 
} 

Я нашел соответствующий вопрос (iterating over and removing from a map), но предполагается, мы итерация над набором ключей. То же самое относится к набору значений?

+1

Иногда мне интересно, что было бы быстрее, чтобы проверить, что происходит или спрашивается в SO? –

ответ

4

От HashMap javadoc:

Итераторов возвращаемых все «методов просмотра коллекции» этот класса является отказоустойчивость быстро: если карта конструктивно изменена в любое время после того, как итератор создается, в любом случае кроме как через собственный метод удаления итератора, итератор будет бросать ConcurrentModificationException.

Таким образом, вы не можете использовать map.remove(key).

Из Javadoc для HashMap#values():

Коллекции поддерживает удаление элемента, которое удаляет соответствующее отображение из карты, через Iterator.remove, Collection.remove, RemoveAll, retainAll и четкие операции.

Для удаления записей из набора значений вы можете использовать Iterator#remove().

Смежные вопросы