Ответ
HashSet полезен, когда нужно:
- Быстро проверять наличие элемента (
O(1)в среднем случае) - Хранить уникальные значения (дубликаты автоматически отбрасываются)
- Не важен порядок элементов
Пример:
val uniqueTags = HashSet<String>()
uniqueTags.add("android")
uniqueTags.add("kotlin")
uniqueTags.add("android") // Не добавится
println(uniqueTags.contains("kotlin")) // true
Не используйте HashSet, если:
- Нужен порядок элементов (лучше LinkedHashSet)
- Требуется сортировка (выбирайте TreeSet)
- Часто нужен доступ по индексу (подойдет ArrayList)
Ответ 18+ 🔞
Ну ты представляешь, есть такая штука — HashSet. Вообще, если по-простому, это как мешок, но не простой, а с приколом. Туда можно накидать чего угодно, но если попробуешь сунуть две одинаковые вещи — вторая просто не полезет, её выплюнет нахуй сразу. Удобно, когда тебе похуй на порядок, но надо быстро узнать, а есть ли у тебя уже эта хрень или нет.
Вот смотри, в жизни это как проверить, не забыл ли ты купить хлеб, заглянув в сумку. За секунду, ёпта. В коде так же: спросил у сета — он тебе сразу: true или false. Никаких циклов, никаких переборов, магия, блядь.
val uniqueTags = HashSet<String>()
uniqueTags.add("android")
uniqueTags.add("kotlin")
uniqueTags.add("android") // Эта строка — как попытка впихнуть вторую бутылку водки в уже полный холодильник. Не влезет, и всё.
println(uniqueTags.contains("kotlin")) // true — и ответ мгновенный, ядрёна вошь!
Но, чувак, тут важно не обосраться. HashSet — он как тот друг, который хорош только для одной конкретной задачи.
Не лезь к нему, если:
- Тебе важен порядок. Положил "яблоко", "грушу", "ананас" — а он тебе вернёт "ананас", "груша", "яблоко", потому что ему так захотелось. Полный распиздяй. Для порядка есть
LinkedHashSet— он хоть и чуть медленнее, но вещи запоминает, в каком порядке ты их дал. - Нужно всё по алфавиту или по росту. HashSet вообще не парится насчёт сортировки. Если тебе надо "Андрей", "Борис", "Василий" — это к
TreeSet. Тот хоть и тормознее, но зато педантичный, всё разложит по полочкам. - Часто надо тащить элемент по номеру, типа "дай мне пятую штуку". Вот тут совсем пиздец, не его профиль. Он понятия не имеет, что такое "пятый". Для этого есть старый добрый
ArrayList— вот у него есть индексы, как в библиотечном каталоге.
Короче, выбирай инструмент по задаче. А то возьмёшь HashSet там, где нужен порядок, и потом будешь ебать копать, почему у тебя всё криво работает. Доверия к таким решениям — ноль ебать.