Ответ
Set в Java/Kotlin использует хэш-таблицу или дерево для хранения элементов. Уникальность обеспечивается через:
- hashCode() и equals() - сначала сравниваются хэши, затем вызывается equals() при коллизиях
- Для TreeSet используется Comparable/Comparator - элементы сортируются и дубликаты отбрасываются
Пример с HashSet:
val set = HashSet<String>()
set.add("a") // true
set.add("a") // false, элемент уже существует
Важные нюансы:
- Для корректной работы необходимо правильно переопределять hashCode() и equals()
- Порядок элементов в HashSet не гарантируется
- TreeSet поддерживает сортировку, но требует Comparable/Comparator