«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Изучение HashSet: погружение в неупорядоченные коллекции

Изучение HashSet: погружение в неупорядоченные коллекции

Опубликовано 8 ноября 2024 г.
Просматривать:363

Exploring HashSet: A Dive into Unordered Collections

Введение

Класс HashSet является частью Java Collections Framework, предоставляя быструю неупорядоченную коллекцию, не допускающую дублирования элементов. Он построен на основе HashMap, то есть наследует те же преимущества сложности, но фокусируется исключительно на уникальности элемента. В этой статье мы рассмотрим, как работает HashSet, что делает его уникальным и чем он отличается от других коллекций.


Что такое хешсет?

HashSet:

  • Неупорядоченный: элементы не имеют предсказуемой последовательности.
  • Уникальный: повторяющиеся элементы игнорируются.
  • Внутренне поддерживается HashMap: он использует HashMap для хранения элементов, уделяя особое внимание клавишам и отбрасывая значения.
  • Средняя временная сложность O(1): такие операции, как вставка, удаление и поиск, очень эффективны.

1. Инициализация HashSet

// Parameterized constructor with initial capacity
Set setWithInitialCapacity = new HashSet(5);

// Parameterized constructor using a collection
Set setWithCollection = new HashSet(Arrays.asList(4, 4, 3));

// Default constructor with default capacity 16
Set set = new HashSet();

Объяснение:

  • Конструктор по умолчанию: Создает HashSet с начальной емкостью 16.
  • Параметризованный конструктор: Вы можете указать начальную емкость, но учтите, что емкость — это не то же самое, что размер. Размер относится к фактическому количеству элементов в наборе.
  • Использование коллекции: HashSet можно создать из коллекции, например списка, гарантируя сохранение только уникальных элементов.

2. Добавление элементов в HashSet

set.add(1);
set.add(2);
set.add(1); // Duplicate value is ignored
System.out.println(set); // Output -> [1, 2]

Объяснение:

  • Метод add() вставляет элементы в HashSet.
  • Повторяющиеся элементы игнорируются. При попытке добавить 1 дважды сохраняется только первое вхождение.

Ключевой вывод

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


3. Проверка размера и емкости

// Parameterized constructor with initial capacity
Set setWithInitialCapacity = new HashSet(5);
System.out.println(setWithInitialCapacity.size()); // Output -> 0

Несмотря на то, что емкость setWithInitialCapacity равна 5, размер равен 0, поскольку размер отражает количество элементов, присутствующих в наборе, а не начальную емкость. Вы можете думать о емкости как о внутреннем пространстве памяти, которое изменяется по мере добавления элементов.


4. Использование HashSet с коллекциями

// Parameterized constructor using a collection
Set setWithCollection = new HashSet(Arrays.asList(4, 4, 3));
System.out.println(setWithCollection); // Output -> [3, 4] or [4, 3]

Объяснение:

  • Хотя в списке были три элемента (4, 4, 3), дубликат значения 4 был удален, оставив только два элемента (3 и 4).
  • Порядок элементов непредсказуем, поскольку HashSet не поддерживает вставку или естественный порядок.

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


5. Индексация в HashSet – возможно ли это?

На собеседованиях часто задают вопрос, можете ли вы получить индекс элемента в HashSet. Ответ: Нет, потому что HashSet использует механизм хеширования для хранения элементов, а не структуру на основе индекса, такую ​​как список или массив.


Краткое изложение ключевых моментов

  1. Неупорядоченный и уникальный: HashSet сохраняет только уникальные элементы, игнорируя дубликаты.
  2. Создано на основе HashMap: Для хранения элементов используются ключи внутреннего HashMap.
  3. Быстрые операции: Средняя временная сложность составляет O(1) для добавления, удаления и проверки элементов.
  4. Емкость и размер: Емкость — это выделенное пространство, а размер — фактическое количество элементов.
  5. Нет индексации: Вы не можете получить элементы по индексу из-за механизма хеширования.

Связь с HashMap

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


Заключение

HashSet — мощный инструмент, если вам нужна быстрая неупорядоченная коллекция, позволяющая избежать дублирования. Хотя он обеспечивает временную сложность O(1) для большинства операций, ему не хватает таких функций, как сортировка и индексирование. Разработчикам знание того, как HashSet связан с HashMap, помогает понять его внутреннюю работу и лучше использовать структуру коллекций.

В следующем посте мы рассмотрим общий вопрос на собеседовании, который часто задают на собеседованиях для проверки знаний кандидатов о концепциях коллекций.


Похожие сообщения

  • Основы Java

  • Основы собеседования с Array

  • Основы памяти Java

Удачного программирования!

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/arshisaxena26/exploring-hashset-a-dive-into-unordered-collections-4ehb?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3