Mediumconcurrent-hashmap
Что такое ConcurrentHashMap?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
ConcurrentHashMap — потокобезопасная HashMap без блокирования всей карты. С Java 8: array of buckets, CAS для пустых, synchronized на первой ноде bucket-а при коллизях. Высокая параллельность при меньшем overhead.
ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
map.put("a", 1); // O(1) amortized, потокобезопасно
map.get("a"); // без блокировки
map.computeIfAbsent("b", k -> compute(k)); // атомарная вставка
map.forEach(1, (k, v) -> /* parallel bulk op */);- До Java 8 — segments (16), каждый свой lock;
size(),isEmpty()— weakly consistent, не блокируют;- Null keys/values не разрешены (в отличие от HashMap);
- Лучше
Collections.synchronizedMap: нет blocking всего map при операции; - Родственные:
ConcurrentLinkedQueue,CopyOnWriteArrayList,ConcurrentSkipListMap.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.