Junior — Middle
Оё ҳолатҳои дар вақти тағир додани коллексия дар ҳоле ки он дар ҳоли гузариш буд, хатои ConcurrentModificationException ба вуҷуд омад?
sobes.tech AI
Ҷавоб аз AI
Да, ошибка ConcurrentModificationException часто возникает, если во время обхода коллекции (например, ArrayList или HashSet) происходит её изменение (добавление или удаление элементов) не через итератор. Это связано с тем, что итераторы в Java проверяют, не изменялась ли коллекция с момента их создания, и при обнаружении изменений выбрасывают это исключение.
Чтобы избежать ошибки, можно:
- Использовать итератор и его методы remove() для удаления элементов во время обхода.
- Использовать коллекции из пакета java.util.concurrent, например CopyOnWriteArrayList, которые поддерживают безопасный обход при изменениях.
- Собрать изменения и применить их после завершения обхода.
Пример безопасного удаления элементов из списка во время обхода:
List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
if (item.equals("b")) {
iterator.remove(); // безопасное удаление
}
}