Получить доступ

Что произойдёт при попытке положить null-ключ в TreeMap?

MiddleКоллекции
Коротко

NullPointerException: TreeMap сравнивает ключи, а null сравнить естественным порядком нельзя. HashMap допускает один null-ключ.

  • Исключение — компаратор, явно обрабатывающий null (Comparator.nullsFirst)
  • ConcurrentHashMap и Hashtable запрещают и null-значения
  • Map.of тоже запрещает null

А ещё null-ключи вообще лучше не использовать

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Разница вытекает из устройства: хеш-таблице достаточно вычислить бакет, и для null он задан особым случаем, а дереву нужно упорядочить ключ относительно соседей. Единственное исключение — если задан компаратор, который явно умеет обрабатывать null. Полезно помнить и остальную картину по null: HashMap допускает один null-ключ и любое число null-значений; Hashtable и ConcurrentHashMap запрещают и то и другое, потому что в конкурентной карте невозможно отличить «значение null» от «ключа нет»; ArrayDeque тоже запрещает null, так как использует его как признак пустоты.

Что хотят услышать

  • Причина NPE.
  • Поведение других карт.

Частые ошибки

  • Обобщать поведение HashMap на все карты.
  • Забывать, что ConcurrentHashMap запрещает null-значения.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓NullPointerException: ключ нужно сравнивать, а сравнить null естественным порядком нельзя
  • ✗Ключ будет добавлен и окажется первым при обходе
  • ✗Ключ будет добавлен, но не найдётся при поиске
  • ✗Будет брошено IllegalArgumentException

Что спросят дальше

  • Почему ConcurrentHashMap не разрешает null-значения?
  • Как отсортировать так, чтобы null оказывались в конце?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем