← Назад к вопросам
Какая структура данных лежит в основе TreeSet?
1.0 Junior🔥 151 комментариев
#Коллекции
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Структура TreeSet
TreeSet построен на основе красно-чёрного дерева (Red-Black Tree), которое является самобалансирующимся бинарным деревом поиска.
Внутренняя реализация
public class TreeSet<E> extends AbstractSet<E>
implements NavigableSet<E>, Cloneable, Serializable {
private transient NavigableMap<E, Object> m;
private static final Object PRESENT = new Object();
}
На самом деле TreeSet - это обертка над TreeMap, где ключами являются элементы, а значением - объект-заглушка PRESENT.
Красно-чёрное дерево
Это бинарное дерево со следующими свойствами:
- Каждый узел окрашен в красный или чёрный цвет
- Корневой узел всегда чёрный
- Все листья (null) - чёрные
- Красный узел не может иметь красных потомков
- Путь от любого узла до листьев содержит одинаковое количество чёрных узлов
Эти правила гарантируют, что дерево остаётся сбалансированным.
Как это выглядит
// При добавлении элементов TreeSet автоматически их сортирует
TreeSet<Integer> set = new TreeSet<>();
set.add(10);
set.add(5);
set.add(15);
set.add(3);
// Итерация вернёт: 3, 5, 10, 15 (в отсортированном порядке)
for (Integer num : set) {
System.out.println(num); // 3, 5, 10, 15
}
Производительность
- add(element) — O(log n)
- remove(element) — O(log n)
- contains(element) — O(log n)
- iteration — O(n), гарантированно в отсортированном порядке
Все операции логарифмические благодаря сбалансированности дерева.
Преимущества
- Отсортированный порядок — элементы всегда в определённом порядке
- Быстрый поиск — O(log n) благодаря двоичному поиску
- Балансировка — красно-чёрное дерево автоматически остаётся сбалансированным
- NavigableSet методы — headSet(), tailSet(), floor(), ceiling()
Когда использовать
- Когда нужны элементы в отсортированном порядке
- Когда часто требуется поиск диапазонов элементов
- Когда нужна логарифмическая производительность при вставке/удалении
TreeSet - идеальный выбор для приложений, требующих отсортированные, уникальные элементы с быстрым доступом.