В чём разница: HashMap vs ConcurrentHashMap?

Ответ

HashMap: не потокобезопасен, допускает null-ключ. ConcurrentHashMap: Java 7 — Segment-блокировки, Java 8+ — CAS + synchronized на головах бакетов. null запрещён. computeIfAbsent — атомарная операция.

Разбор: HashMap не потокобезопасен и разрешает null-ключ и null-значения; ConcurrentHashMap потокобезопасен и null запрещает полностью. В Java 7 он использовал сегментные блокировки, в Java 8+ — CAS плюс synchronized на голове конкретного бакета (а не на всей таблице), что и даёт высокую конкурентность; computeIfAbsent при этом атомарна. Дистракторы путают гранулярность блокировки и поведение с null.

Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.

Заказать гайд Пройти тест
новые гайды и свежие вопросы с собесов — первыми в Telegram Смотреть гайды Подписаться