Встречается на собеседованиях • сегодня
В чем разница между CopyOnWriteArrayList и ArrayList
`CopyOnWriteArrayList` и `ArrayList` — оба реализуют интерфейс `List`, но различаются по поведению в многопоточной среде:
1. **Потокобезопасность**
- `ArrayList` — не потокобезопасен. При одновременной модификации может возникнуть `ConcurrentModificationException`.
- `CopyOnWriteArrayList` — потокобезопасен. Использует механизм копирования при изменении (COW — Copy-On-Write), что исключает `ConcurrentModificationException` при итерации.
2. **Производительность**
- `ArrayList` — быстрее для чтения и записи в однопоточной среде.
- `CopyOnWriteArrayList` — медленнее при записи (из-за копирования), но быстрее при чтении в многопоточной среде (нет блокировок).
3. **Итераторы**
- Итератор `ArrayList` выбрасывает исключение при изменении списка во время итерации.
- Итератор `CopyOnWriteArrayList` работает с моментальным снимком данных и не реагирует на изменения после создания.
**Пример:**
```java
CopyOnWriteArrayList cowList = new CopyOnWriteArrayList<>();
cowList.add("Java"); // Создается копия массива
ArrayList arrayList = new ArrayList<>();
arrayList.add("Java"); // Изменяется напрямую
```
**Когда использовать:**
- `CopyOnWriteArrayList` — если частое чтение и редкая запись в многопоточной среде.
- `ArrayList` — для однопоточных сценариев или с внешней синхронизацией.

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы