четверг, 12 февраля 2009 г.

java ConcurrentModificationException

Эта ошибка может возникнуть в случае, когда происходит попытка изменить коллекцию внутри итерации этой же коллекции. Например:
List originalList = new ArrayList();
for (Iterator it =
originalList.iterator(); it.hasNext(); ) {
originalList.add(someObject);
}

Решение: создать копию коллекции и изменять нужную коллекцию внутри итерации по копии. Пример:
List copy = new ArrayList(originalList);
for (Iterator it = copy.iterator(); it.hasNext(); ) {
originalList.add(someObject);
}

Заметка: можно также использовать специальные классы колекций (что-то типа
CopyOnWriteArrayList), но в большинстве случаев лучше использовать копии.
Для дополнительной информации:

Class ConcurrentModificationException (англ.)

описание решения проблемы на форуме Sun (англ.)

Комментариев нет: