Выбор ответа Middle java.util.concurrent и виртуальные потоки обновлено

null в ConcurrentHashMap

Вопрос

Почему ConcurrentHashMap не разрешает null в ключах и значениях?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Иначе null из get не отличить от отсутствия ключа атомарно. В однопоточном HashMap неоднозначность null решается вызовом containsKey.

Варианты ответа

  1. Из-за того, что null нельзя захешировать и положить в корзину
  2. Это ограничение HashMap, которое ConcurrentHashMap унаследовал
  3. null занимал бы отдельную блокировку и тормозил все корзины
  4. Иначе null из get не отличить от отсутствия ключа атомарноправильный ответ

Разбор

В однопоточном HashMap неоднозначность null решается вызовом containsKey. В конкурентной карте между get и containsKey другой поток мог изменить данные, поэтому автор Дуг Ли запретил null совсем. HashMap null-ключ как раз разрешает (хеш null равен 0), так что дело не в хешировании и не в наследовании.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме