В чем отличие TreeMap от HashMap в Java и когда следует использовать TreeMap?

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

Ответ

TreeMap и HashMap — это реализации интерфейса Map, но с фундаментально разной внутренней структурой и гарантиями.

Характеристика HashMap TreeMap
Внутренняя структура Хэш-таблица (массив + связные списки / деревья) Красно-черное дерево (сбалансированное бинарное дерево поиска)
Порядок элементов Не гарантируется. Может меняться при рехешинге. Элементы отсортированы по ключам (естественный порядок или Comparator).
Временная сложность (put/get) O(1) в среднем, O(n) в худшем случае (коллизии) O(log n) гарантированно для основных операций.
Допустимые ключи Должны корректно реализовывать hashCode() и equals(). Должны быть Comparable или нужен внешний Comparator.
Дополнительные операции - firstKey(), lastKey(), subMap(), headMap(), tailMap() (диапазонные запросы).

Пример использования TreeMap:

TreeMap<Integer, String> scoreboard = new TreeMap<>(Comparator.reverseOrder());
scoreboard.put(150, "Alice");
scoreboard.put(95, "Bob");
scoreboard.put(120, "Charlie");

System.out.println(scoreboard); // {150=Alice, 120=Charlie, 95=Bob} (по убыванию ключа)
System.out.println("Top scorer: " + scoreboard.firstEntry()); // Top scorer: 150=Alice
// Получить всех, кто набрал от 100 до 200 очков
Map<Integer, String> topPlayers = scoreboard.subMap(200, 100);

Когда использовать TreeMap:

  1. Когда критически важен порядок элементов по ключу (например, вывод отсортированных данных, работа с диапазонами).
  2. Когда нужны гарантии производительности O(log n), а не средний случай O(1) с риском деградации до O(n) в HashMap.
  3. Когда необходимы операции с навигацией по отсортированным ключам (поиск ближайшего, получение подмножества).

В большинстве других случаев HashMap предпочтительнее из-за своей средней константной скорости.