В каком порядке хранятся элементы в Java TreeMap?

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

Ответ

Элементы в TreeMap<K, V> хранятся в отсортированном порядке по ключам.

Детали:

  1. Порядок сортировки определяется либо:
    • Естественным порядком (natural ordering) ключей, если ключи реализуют интерфейс Comparable (например, Integer, String).
    • Внешним Comparator, переданным в конструктор TreeMap.
  2. Внутренняя структура — красно-черное дерево (Red-Black Tree), которое поддерживает элементы в отсортированном виде и гарантирует логарифмическое время выполнения основных операций (put, get, remove — O(log n)).

Пример:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        // TreeMap с естественным порядком (по возрастанию)
        TreeMap<Integer, String> map = new TreeMap<>();
        map.put(3, "Three");
        map.put(1, "One");
        map.put(2, "Two");

        // Элементы выводятся в отсортированном порядке по ключу: 1, 2, 3
        System.out.println(map); // {1=One, 2=Two, 3=Three}

        // Итерация также происходит в отсортированном порядке
        for (Map.Entry<Integer, String> entry : map.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }
    }
}

Важно: TreeMap не позволяет использовать null в качестве ключа, если только для сравнения не используется специальный Comparator, обрабатывающий null.