Skip to content

SortedSet _ NavigableSet _ TreeSet

Лекция: SortedSet, NavigableSet и TreeSet в Java

Введение

Java предоставляет различные интерфейсы и классы для работы с коллекциями, и среди них SortedSet, NavigableSet и TreeSet играют важную роль в управлении упорядоченными наборами данных. Эти структуры данных позволяют хранить элементы в отсортированном порядке и обеспечивают удобные методы для навигации по элементам. В этой лекции мы рассмотрим, что такое SortedSet, NavigableSet и TreeSet, их основные характеристики и примеры использования.

1. SortedSet

SortedSet — это интерфейс, который расширяет интерфейс Set и определяет набор, элементы которого хранятся в отсортированном порядке. Он обеспечивает методы для работы с элементами, которые позволяют получать доступ к элементам по их порядку.

Основные методы:
  • Comparator<? super E> comparator(): Возвращает компаратор, используемый для сортировки элементов, или null, если порядок естественный.
  • E first(): Возвращает первый (наименьший) элемент в наборе.
  • E last(): Возвращает последний (наибольший) элемент в наборе.
  • SortedSet<E> subSet(E fromElement, E toElement): Возвращает представление набора, содержащего элементы от fromElement (включительно) до toElement (исключительно).
  • SortedSet<E> headSet(E toElement): Возвращает представление набора, содержащего элементы до toElement (исключительно).
  • SortedSet<E> tailSet(E fromElement): Возвращает представление набора, содержащего элементы от fromElement (включительно) до конца набора.

2. NavigableSet

NavigableSet — это интерфейс, который расширяет SortedSet и добавляет методы для навигации по элементам. Он позволяет выполнять операции, такие как получение ближайших элементов, и предоставляет методы для работы с элементами в обратном порядке.

Основные методы:
  • E lower(E e): Возвращает наибольший элемент, меньший, чем e, или null, если такого элемента нет.
  • E floor(E e): Возвращает наибольший элемент, меньший или равный e, или null, если такого элемента нет.
  • E ceiling(E e): Возвращает наименьший элемент, больший или равный e, или null, если такого элемента нет.
  • E higher(E e): Возвращает наименьший элемент, больший, чем e, или null, если такого элемента нет.
  • NavigableSet<E> descendingSet(): Возвращает набор, содержащий элементы в обратном порядке.

3. TreeSet

TreeSet — это класс, который реализует интерфейс NavigableSet и SortedSet. Он использует красно-черное дерево для хранения элементов, что обеспечивает автоматическую сортировку и уникальность элементов.

Основные характеристики TreeSet:
  • Упорядоченность: Элементы хранятся в отсортированном порядке.
  • Уникальность: Не допускает дубликатов.
  • Быстрые операции: Операции добавления, удаления и поиска выполняются за O(log n).
Пример использования TreeSet:
import java.util.TreeSet;

public class TreeSetExample {
    public static void main(String[] args) {
        TreeSet<Integer> treeSet = new TreeSet<>();

        // Добавление элементов
        treeSet.add(5);
        treeSet.add(1);
        treeSet.add(3);
        treeSet.add(2);
        treeSet.add(4);

        // Вывод элементов в отсортированном порядке
        System.out.println("Элементы TreeSet в отсортированном порядке:");
        for (Integer number : treeSet) {
            System.out.println(number);
        }

        // Получение первого и последнего элемента
        System.out.println("Первый элемент: " + treeSet.first());
        System.out.println("Последний элемент: " + treeSet.last());

        // Получение подмножества
        System.out.println("Подмножество от 2 до 4: " + treeSet.subSet(2, 4));
    }
}

4. Сравнение SortedSet, NavigableSet и TreeSet

Упорядоченность Элементы хранятся в отсортированном порядке Элементы хранятся в отсортированном порядке Элементы хранятся в отсортированном порядке
Навигация Ограниченные методы навигации Расширенные методы навигации Реализует интерфейсы SortedSet и NavigableSet
Реализация Интерфейс Интерфейс Класс, основанный на красно-черном дереве
Дубликаты Не допускает Не допускает Не допускает
Сложность операций O(log n) для добавления, удаления и поиска O(log n) для добавления, удаления и поиска O(log n) для добавления, удаления и поиска

5. Когда использовать SortedSet, NavigableSet и TreeSet?

  • Используйте SortedSet, когда:
  • Вам нужно хранить уникальные элементы в отсортированном порядке.
  • Вы хотите использовать базовые методы для работы с отсортированными наборами, но не нуждаетесь в навигационных методах.

  • Используйте NavigableSet, когда:

  • Вам нужно не только хранить уникальные элементы в отсортированном порядке, но и выполнять навигационные операции, такие как получение ближайших элементов.

  • Используйте TreeSet, когда:

  • Вам нужно хранить уникальные элементы в отсортированном порядке и выполнять операции добавления, удаления и поиска с логарифмической сложностью.
  • Вы хотите использовать методы как SortedSet, так и NavigableSet для работы с элементами.

Заключение

SortedSet, NavigableSet и TreeSet — это мощные инструменты для работы с упорядоченными наборами данных в Java. Понимание их характеристик и различий поможет вам выбрать подходящий интерфейс или класс в зависимости от требований вашего приложения. Эти структуры данных обеспечивают удобные методы для работы с уникальными элементами и позволяют эффективно управлять порядком и навигацией по данным.

пример

[[Programming/java/1. osnovi/Тема 6. Основные структуры данных/Урок 6. SortedSet _ NavigableSet _ TreeSet/задание|задание]]