HashSet

Особенности HashSet:

  1. Уникальность элементов: HashSet гарантирует, что каждый элемент в нем уникален. Если вы попытаетесь добавить дубликат элемента, он будет проигнорирован.
  2. Неупорядоченность: Элементы в HashSet не хранятся в определенном порядке. Вы не можете полагаться на порядок элементов в HashSet.
  3. Быстрый доступ и вставка: Время доступа к элементу и вставки в HashSet обычно константно и зависит от хэш-функции объектов.
  4. Отсутствие дубликатов: Поскольку элементы в HashSet уникальны, он часто используется для удаления дубликатов из коллекции или для проверки наличия элемента в ней.

Когда лучше использовать HashSet в Android:

  1. Удаление дубликатов: Если вам нужно удалить дубликаты из коллекции, использование HashSet может быть эффективным.
  2. Проверка наличия элемента: Если вам нужно быстро проверить, существует ли определенный элемент в коллекции, HashSet будет хорошим выбором.
  3. Необходимость в уникальности элементов: Если вам нужно гарантировать уникальность элементов в коллекции, HashSet также подходит.

Как работает HashSet под капотом:

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

Сходство и отличие от других видов коллекций:

  • ArrayList: Оба являются коллекциями, но в отличие от ArrayList, HashSet гарантирует уникальность элементов и не сохраняет порядок добавления элементов.
  • HashMap: HashSet использует HashMap внутри себя для хранения элементов, но в отличие от HashMap, в HashSet отсутствуют связанные значения.
val set = HashSet<String>()

// Добавление элементов
set.add("Привет")
set.add("Мир")

// Проверка наличия элемента
val containsHello = set.contains("Привет") // true

// Удаление элемента
set.remove("Привет")

// Размер множества
val size = set.size // 1