Может ли TreeMap в Java хранить null в качестве ключа?

«Может ли TreeMap в Java хранить null в качестве ключа?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, не может. При попытке вставить null в качестве ключа в TreeMap будет выброшено NullPointerException.

Причина: TreeMap реализует интерфейс SortedMap и хранит ключи в отсортированном порядке. Для сравнения ключей используется:

  1. Естественный порядок (natural ordering): Ключи должны реализовывать интерфейс Comparable. Вызов compareTo() на null приводит к NullPointerException.
  2. Компаратор (Comparator): Если компаратор не обрабатывает null явно, вызов comparator.compare(key1, key2) с null-аргументом также вызовет исключение.

Пример:

TreeMap<String, Integer> map = new TreeMap<>();
map.put("apple", 1); // OK
map.put(null, 2);    // Выбросит NullPointerException

Сравнение с HashMap: В отличие от TreeMap, HashMap разрешает один null-ключ, так как для хэширования и сравнения использует методы hashCode() и equals(), которые могут быть вызваны для null.