Ответ
TreeMap<K, V> — реализация интерфейса SortedMap и NavigableMap, основанная на красно-черном дереве.
Преимущества:
- Автоматическая сортировка: Элементы хранятся в порядке возрастания ключей (согласно их естественному порядку
Comparableили переданномуComparator). Итерация происходит в этом порядке. - Эффективные операции с диапазонами: Методы
subMap(),headMap(),tailMap()позволяют быстро получать представления части карты. - Поиск границ: Методы
lowerKey(),floorKey(),ceilingKey(),higherKey()для нахождения соседних ключей. - Предсказуемая производительность: Операции
put(),get(),remove()выполняются за O(log n), что стабильно для больших данных.
Недостатки:
- Производительность: O(log n) медленнее, чем O(1) у
HashMapдля основных операций, если не требуется сортировка. - Требования к ключам: Ключи должны реализовывать
Comparableили в конструктор необходимо передатьComparator. Иначе будет выброшеноClassCastException. - Запрет null-ключей: Попытка вставить
nullв качестве ключа вызоветNullPointerException.
Пример использования:
// TreeMap с натуральным порядком (Integer реализует Comparable)
TreeMap<Integer, String> scoreMap = new TreeMap<>();
scoreMap.put(150, "Alice");
scoreMap.put(95, "Bob");
scoreMap.put(200, "Charlie");
System.out.println(scoreMap); // {95=Bob, 150=Alice, 200=Charlie} - отсортировано!
// Получение диапазона
SortedMap<Integer, String> topScores = scoreMap.tailMap(100);
System.out.println(topScores); // {150=Alice, 200=Charlie}
// Поиск границ
Integer key = scoreMap.lowerKey(150); // Метод NavigableMap
System.out.println(key); // 95
Когда использовать: Когда критически важен порядок элементов или часто требуются операции с диапазонами. Если нужен просто быстрый доступ по ключу без порядка — выбирайте HashMap.