Как Set гарантирует уникальность значений

«Как Set гарантирует уникальность значений» — вопрос из категории Java, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Set в Java/Kotlin использует хэш-таблицу или дерево для хранения элементов. Уникальность обеспечивается через:

  1. hashCode() и equals() - сначала сравниваются хэши, затем вызывается equals() при коллизиях
  2. Для TreeSet используется Comparable/Comparator - элементы сортируются и дубликаты отбрасываются

Пример с HashSet:

val set = HashSet<String>()
set.add("a")  // true
set.add("a")  // false, элемент уже существует

Важные нюансы:

  • Для корректной работы необходимо правильно переопределять hashCode() и equals()
  • Порядок элементов в HashSet не гарантируется
  • TreeSet поддерживает сортировку, но требует Comparable/Comparator