Java Advanced Collections TreeSet: что это такое и зачем его использовать?
Java Advanced Collections TreeSet: что это такое и зачем его использовать?

Эй, эй, милые милашки, я ваш хороший друг - ошибка. Сегодня я здесь, чтобы популяризировать для вас знания о Java SE. Не прячьтесь, пожалуйста, выслушайте меня и дайте мне немного полезной информации. палец вверх. У меня так много лайков. Это даст вам мотивацию говорить более увлекательно! Итак, выработайте хорошую привычку сначала любить, а потом читать, и не перегружайтесь полезной информацией~

Язык кода:js
копировать
Описание среды: Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8.

Предисловие

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

краткое содержание

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

TreeSet

Обзор

Особенности TreeSet

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

Базовая реализация TreeSet

 В Java базовая структура данных TreeSet реализована на основе красно-черной древовидной структуры данных. Красно-черное дерево представляет собой приблизительно сбалансированное бинарное дерево поиска, обеспечивающее, что разница высот между левым и правым поддеревьями любого узла не будет превышать двух раз.

 В красно-черном дереве каждый узел отмечен красным или черным. Корневой узел дерева черный. Если узел красный, его дочерние узлы должны быть черными (и не обязательно наоборот). На пути от корневого узла к любому пустому узлу количество пройденных черных узлов должно быть одинаковым.

Конструктор TreeSet

TreeSet предоставляет множество Конструкторов, наиболее часто используемыми из которых являются Конструктор без параметров и Конструктор с параметрами Comparator.

Определение Конструктора без женьшеня следующее:

Язык кода:java
копировать
public TreeSet()

Конструктор с параметром Comparator определяется следующим образом:

Язык кода:java
копировать
    public TreeSet(Comparator<? super E> comparator)

  Рекомендуется, чтобы при использовании существуиспользоватьTreeSet с параметром Comparator можно было гарантировать, что указанный компаратор будет использоваться при сравнении существующих элементов.

 Ниже приведены скриншоты исходного кода:

Анализ исходного кода

Основные операции TreeSet

Код для добавления элемента «Добавить» в TreeSet выглядит следующим образом:

Язык кода:java
копировать
TreeSet<String> set = new TreeSet<>();
set.add("Java");
set.add("Python");
set.add("C++");

Этот код добавит в TreeSet три элемента: Java, Python и C++. Поскольку TreeSet упорядочен, элементы будут отсортированы лексикографически.

Код элемента «Удалить» из TreeSet выглядит следующим образом:

Язык кода:java
копировать
set.remove("Python");

Этот код удалит элементы Python из TreeSet.

Код для определения наличия указанного элемента в TreeSet выглядит следующим образом:

Язык кода:java
копировать
boolean isExist = set.contains("Java");

Этот код определит, есть ли элемент Java в TreeSet. Если он существует, он вернет true, в противном случае — false.

Код для получения первого элемента в TreeSet выглядит следующим образом:

Язык кода:java
копировать
String first = set.first();

Этот код получит первый элемент в TreeSet.

Код для получения последнего элемента в TreeSet выглядит следующим образом:

Язык кода:java
копировать
String last = set.last();

Этот код получит последний элемент в TreeSet.

 Ниже приведены скриншоты исходного кода:

Красно-черные деревья в TreeSet

TreeSet поддерживает красно-черное дерево на нижнем уровне. В операциях вставки, удаления и поиска в красно-черном дереве временная сложность равна O(log n).

 Поскольку красно-черное дерево является упорядоченным двоичным деревом, элементы в TreeSet также упорядочены. При вызове метода добавления TreeSet будет вызван метод вставки красно-черного дерева. В процессе вставки элемент будет вставлен в правильную позицию в соответствии с его размером.

Сортировка с помощью компаратора

  В приведенном выше примере кода мы создали объект TreeSet без параметров. В этом случае TreeSet будет сравнивать метод CompareTo объекта элемента. Если мы хотим использовать другой способ сравнения, вы можете Сортировка. с помощью компаратора。

Компаратор — это функциональный интерфейс, который можно создать с помощью лямбда-выражений. Например, если мы хотим отсортировать по длине строки, мы можем написать:

Язык кода:java
копировать
TreeSet<String> set = new TreeSet<>((a, b) -> a.length() - b.length());
set.add("Java");
set.add("Python");
set.add("C++");

Этот код будет сортироваться по длине строки, поэтому порядок элементов в TreeSet следующий: C++, Java, Python.

Сценарии применения

Сцена TreeSet

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

Преимущества TreeSet

  • TreeSet упорядочен, обеспечивая отсортированный порядок элементов.
  • Нижний уровень TreeSet реализован с использованием красно-черного дерева, а временная сложность операций вставки, удаления и поиска равна O(log n).
  • TreeSet допускает нулевые элементы.

Недостатки TreeSet

  • При оценке равенства элементов необходимо использовать для обработки Компаратор.
  • Нижний уровень TreeSet представляет собой красно-черное дерево, поэтому такие операции, как вставка, удаление и поиск, требуют понимания и обработки знаний, связанных с деревом.

Введение в методы кода класса

Ниже приводится введение в некоторые важные методы класса TreeSet.

Конструктор

Язык кода:java
копировать
public TreeSet()

Нет женьшеня Конструктор,Создайте пустой объект TreeSet.。

Язык кода:java
копировать
public TreeSet(Comparator<? extends E> comparator)

Конструктор с параметром Comparator,Создайте пустой объект TreeSet.,И используйте указанный компаратор для сортировки.

Добавить элемент

Язык кода:java
копировать
public boolean add(E e)

КTreeSetсередина Добавить элемент。

Удалить элемент

Язык кода:java
копировать
public boolean remove(Object o)

Удаляет указанный элемент из TreeSet.

Найти элементы

Язык кода:java
копировать
public boolean contains(Object o)

Определите, содержит ли TreeSet указанный элемент.

Язык кода:java
копировать
public E first()

Получите первый элемент в TreeSet.

Язык кода:java
копировать
public E last()

Получите последний элемент в TreeSet.

тестовый пример

Ниже приведен простой тестовый пример для тестирования базовой функциональности TreeSet.

Язык кода:java
копировать
package com.demo.javase.day63;

import java.util.TreeSet;

/**
 * @Author грибок-ошибка
 * @Date 2023-11-06 11:01
 */
public class TreeSetTest {

    public static void main(String[] args) {
        TreeSet<String> set = new TreeSet<>();
        set.add("Java");
        set.add("Python");
        set.add("C++");

        System.out.println(set.contains("Java")); // true
        System.out.println(set.contains("Ruby")); // false

        System.out.println(set.first()); // C++
        System.out.println(set.last()); // Python

        set.remove("Python");
        System.out.println(set.contains("Python")); // false
    }
}

Результаты испытаний

  Согласно тестам, указанным выше пример,местный Результаты Следующие испытания приведены только для справки, вы также можете изменить их самостоятельно. пример Или добавьте больше тестовых данных или методов тестирования и начните профессионально учиться, чтобы углубить свое понимание.

Анализ тестового кода

  Согласно тестам, указанным выше пример,существовать Теперь я дам вам глубокую и подробную интерпретацию тестового кода, чтобы большее количество студентов могло понять и углубить свое впечатление.

 Этот код представляет собой программу Java, которая в основном демонстрирует использование класса TreeSet для создания сортируемой коллекции и выполнения таких операций, как добавление, запрос и удаление коллекции. Конкретный анализ заключается в следующем:

  1. Импортируйте класс java.util.TreeSet.
  2. В основном методе создайте объект экземпляра TreeSet и добавьте три элемента строкового типа: «Java», «Python», «C++».
  3. Используйте метод contains, чтобы узнать, содержит ли коллекция элемент, и вывести результаты запроса. Например, если вы запрашиваете, содержит ли коллекция строки «Java» и «Ruby», выходные результаты будут иметь значения true и false соответственно.
  4. Используйте методы first и Last для вывода первого и последнего элементов коллекции соответственно. Например, выходные результаты: «C++» и «Python» соответственно.
  5. использовать remove Метод, удалить элемент в коллекции и использовать contains Метод для запроса, существует ли элемент еще в коллекции. Например, Удалить элемент "Python" После этого еще раз запросите, находится ли элемент в наборе, и получите выходной результат: false。

Краткое изложение полного текста

  В этой статье мы представляем расширенную коллекцию Java TreeSet. Начнем с особенностей Представлены TreeSet и базовая реализация, а затем основные операции TreeSetи Сортировка с помощью метод компаратора. Далее мы представили сценарии применения TreeSet, его преимущества и недостатки, а также представили некоторые важные методы класса TreeSet. Наконец, мы также написали простой тестовый например, Протестированный TreeSet.

Подвести итог

  В этой статье представлена ​​расширенная коллекция Java TreeSet, которая представляет собой упорядоченную и сортируемую коллекцию. Базовая реализация красно-черной древовидной структуры данных TreeSet может быстро выполнять операции вставки, удаления и поиска, а также обеспечивать упорядочивание элементов. Мы можем создать объект TreeSet, используя Конструктор без параметров или Конструктор с параметрами Comparator, а также добавлять, удалять и искать, используя связанные методы. Кроме того, в этой статье также кратко описаны сценарии применения, преимущества, недостатки и важные методы TreeSet, а также представлен простой тест. пример дает демонстрацию.

  ...

  Хорошо, содержание этого выпуска в основном подходит к концу. Если вы хотите узнать больше, вы можете обратиться к этой рубрике Подвести. итог《Навигационная статья руководства «Snowball Learning Java»》,Эта рубрика посвящена созданию самых хардкорных Java Серия обучающего контента с нулевой базой. 🚀 Создавайте качественные хардкорные колонки по всей сети, которые помогут вам обогнать по прямой, каждый может подписаться и продолжить обучение;

Исходный код приложения

  Все исходные коды, упомянутые выше, загружены и синхронизированы.существовать「Gitee」,Предоставьте учащимся индивидуальное справочное обучение,Помогите вам освоить его быстрее.

☀️Предлагаю/рекомендую вам

Если вы студент компьютерного факультета,Вы все еще интересуетесь программированием?,Рекомендуется изучить эту колонку напрямую, без каких-либо сомнений.«Снежок, изучение Java»,грибок-ошибка,Все студенты, изучающие эту рубрику,можно приобрести необходимые знания и навыки,Самый быстрый способ начать программировать на Java в Интернете.,как снежный ком,Роллинг все больше и больше,Экспоненциальное улучшение.

наконец,Если эта статья поможет вам,Помогите авторуТри клика, чтобы подписаться, поставить лайк и собрать,Ваша поддержка — моя самая большая мотивация продолжать писать.。   В то же время каждый может подписаться на общедоступный аккаунт: «Дом чудес в круге обезьян». , чтобы узнать больше технических статей того же типа и получить последние вопросы для интервью с интернет-компанией BAT, 4000G бесплатно Электронные книги в формате PDF, шаблоны резюме, технические статьи, документы Markdown и другие массивные материалы.

📣Обо мне

  Я педераст, CSDN | Наггетсы) | infoQ | 51CTO Другие эксперты по блогам сообщества, топ-30 звезд предыдущих блогов, топ-40 самых популярных авторов года Nuggets, топ-12 ежегодных блоггеров 51CTO, Huawei Cloud | Облако Алибаба| Высококлассные авторы из таких сообществ, как Tencent Cloud.,Общее количество поклонников во всей сети15w+ ; Хардкорный общедоступный аккаунт WeChat «Ape Circle Wonder House» приглашает вас присоединиться! Бесплатная проституция, последние вопросы для интервью с интернет-компанией BAT, 4000G Электронные книги в формате PDF, шаблоны резюме и другие массивные материалы.


--End

ЯсуществоватьучаствоватьЯ участвую в пятом выпуске специального учебного лагеря Tencent Technology Creation 2024 с эссе, получившими награды. Приходите и разделите приз со мной!

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose