Почему коллекция в Java называется TreeSet?

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

Ответ

Название TreeSet отражает две ключевые характеристики этой коллекции:

  1. Tree — указывает на внутреннюю структуру данных: самобалансирующееся бинарное дерево поиска (обычно красно-черное дерево).
  2. Set — указывает на интерфейс: коллекция, которая не допускает дубликатов элементов.

Свойства TreeSet, вытекающие из структуры "дерева":

  • Автоматическая сортировка. Элементы хранятся в отсортированном порядке согласно их natural ordering (например, для чисел — по возрастанию) или согласно предоставленному Comparator.
  • Логарифмическая сложность операций. Основные операции (add(), remove(), contains()) выполняются за время O(log n), где n — количество элементов.
  • Упорядоченный обход. Предоставляет эффективные методы для навигации: first(), last(), higher(), lower(), subSet().

Пример, демонстрирующий сортировку:

TreeSet<Integer> numbers = new TreeSet<>();
numbers.add(5);
numbers.add(1);
numbers.add(3);
System.out.println(numbers); // [1, 3, 5] - вывод отсортирован

// Использование компаратора для обратной сортировки
TreeSet<Integer> reversedSet = new TreeSet<>(Comparator.reverseOrder());
reversedSet.addAll(numbers);
System.out.println(reversedSet); // [5, 3, 1]

Таким образом, TreeSet — это упорядоченное множество на основе дерева.