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

Курс разработки Java для Android может помочь лучше понять эту тему.

1. Скорость и внутренняя реализация

HashSet гарантирует, что стандартное количество времени, необходимое для выполнения таких операций, как обнаружение, вставка и удаление данных, существенно не изменится в ходе его использования. HashSet — гораздо более эффективная структура данных, чем TreeSet. Хэш-таблицы используются при разработке структуры данных HashSet. По сравнению со сложностью поиска, вставки и удаления элементов в HashSet, которая равна O, сложность этих операций при выполнении над TreeSet больше (Log n). Тем не менее, данные в TreeSet имеют логическую и непротиворечивую структуру. Можно использовать множество дополнительных методов, таких как Higher(), возвращающий элемент с наименьшей высотой, Floor() и потолок(), среди прочих. Кроме того, выполнение этих операций в TreeSet намного быстрее (O (Log n)), а в HashSet такой возможности нет. Адаптивное бинарное дерево поиска — это то, что в первую очередь используется для создания TreeSet (красно-черное дерево). В языке программирования Java структура данных TreeSet дополняется структурой данных TreeMap.

2. Заказ

Члены HashSet не выполняются в каком-либо определенном порядке, если смотреть снаружи сервера. Компараторы Java Comparable и Comparator используются для определения порядка, в котором хранятся объекты, хранящиеся в TreeSet. Элементы, включенные в TreeSet, по умолчанию располагаются по возрастанию. При работе с упорядоченным набором у вас есть доступ к ряду различных методов. Некоторые из них: first(), last(), headSet(), tailSet() и другие.

3. Нулевой объект

В HashSet допустимо наличие нулевых объектов. Чтобы предотвратить использование java.lang. TreeSet не поддерживает нулевые объекты и генерирует исключение NullPointerException в ответ на обнаружение любых таких объектов. Это связано с тем, что TreeSet придерживается стандарта, определенного NullPointerException. Исключение нулевого указателя.

Полный курс Java-разработчика может улучшить ваши навыки.

4. Сравнение

Класс HashSet использует метод equals() для сравнения компонентов набора, чтобы идентифицировать экземпляры повторяющихся данных. Функция compareTo() объекта TreeSet дает тот же результат, что и ее аналог. Если equals() и compareTo() возвращают разные результаты, это указывает на то, что интерфейс Set был нарушен; в этом случае дубликаты будут разрешены в таких реализациях, как TreeSet. Чтобы быть более конкретным, если даны два одинаковых объекта, метод equals() должен возвращать true, а метод compareTo() должен возвращать ноль. После прочтения о различиях между двумя коллекциями ваши специалисты по данным, несомненно, задаются вопросом, уместно ли использовать TreeSet вместо HashSet. Нам нужны уникальные элементы, не просто уникальные, а уникальные элементы, которые были отсортированы. TreeSet всегда возвращает отсортированный список в порядке возрастания.

· TreeSet превосходит HashSet с точки зрения локальности.

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

· Алгоритм красно-черного дерева, лежащий в основе TreeSet, отвечает за организацию данных. TreeSet полезен, когда нужно часто выполнять операции чтения/записи.

· Эти две структуры данных похожи друг на друга, причем последняя представляет собой LinkedHashSet. Он имеет ту же временную сложность, что и HashSet, и сохраняет порядок вставки (обратите внимание, что это не порядок сортировки, а порядок вставки элементов).

Полный курс для разработчиков Android и Java может помочь вам лучше понять эту тему.