JavaRush /Курсы /Java Syntax Pro /Коллекция HashSet

Коллекция HashSet

Java Syntax Pro
13 уровень , 0 лекция
Открыта

1. Контейнеры и коллекции

Контейнерами или коллекциями называют классы, которые позволяют хранить и обрабатывать много объектов сразу. Вы уже знаете две разновидности контейнеров — массивы и списки.

В Java есть несколько десятков коллекций, каждая из которых хранит элементы своим специфическим способом. Вот некоторые из них:

Тип коллекции Класс Описание
List
ArrayList
Список
LinkedList
Связный список
Vector
Вектор
Stack
Стэк (стопка)
Set
HashSet
Множество
TreeSet
LinkedHashSet
Queue
PriorityQueue
Очередь
ArrayDeque
Map
HashMap
Карта/Словарь
TreeMap
HashTable

Тут есть некоторая неоднозначность с именами. Хотя в большинстве языков программирования все эти структуры данных принято называть коллекциями, в Java это не так. В языке Java некоторые из этих классов реализуют интерфейс Collection, в то время как другие — нет.

Поэтому коллекции разделились на коллекции в широком смысле и коллекции в узком смысле (только те, которые реализуют интерфейс Collection).

Поэтому, чтобы не путаться, коллекциями называют только коллекции в узком смысле (классы должны реализовывать интерфейс Collection). Это все коллекции типа List, Set и Queue. Коллекции же в широком смысле принято называть контейнерами. К ним относятся классы типа Map и массивы.


2. Коллекция HashSet

Класс HashSet является типичным представителем коллекций типа «множество». Во многом он похож на класс ArrayList, и в каком-то смысле является его более примитивной версией.

Создать объект типа HashSet можно с помощью команды вида:

HashSet<Тип> имя = new HashSet<Тип>();

Где тип — это тип элементов, которые можно хранить в коллекции HashSet.

У класса HashSet есть такие методы:

Метод Описание
boolean add(Тип value)
Добавляет элемент value в коллекцию
boolean remove(Тип value)
Удаляет элемент value из коллекции.
Возвращает true, если там такой элемент был
boolean contains(Тип value)
Проверяет, есть ли в коллекции элемент value
void clear()
Очищает коллекцию: удаляет все элементы
int size()
Возвращает количество элементов в коллекции

Пример использования множества.

Давайте напишем программу, которая прощается с пользователем, если он с ней поздоровался: если пользователь сказал привет. Для большего интереса «привет» можно будет говорить на нескольких языках.

Код Примечание
HashSet<String> set = new HashSet<String>();

set.add("Привет");
set.add("Hello");
set.add("Hola");
set.add("Bonjour");
set.add("Ciao");
set.add("Namaste");

Scanner console = new Scanner(System.in);
String str = console.nextLine();

if (set.contains(str))
   System.out.println("Да спаткання!");
Создаем объект типа HashSet, который хранит элементы типа String.


Заносим в set приветствия на разных языках.




Вводим с консоли слово,


если это слово есть в нашем множестве приветствий, то прощаемся (по-белорусски).


3. Множество

Коллекция Set создана для хранения множества элементов. Поэтому ее так и называют Set (множество). У этой коллекции есть три особенности.

Операции над множеством

С множеством можно делать только три операции: добавлять элементы во множество, удалять элементы из множества и проверять, есть ли во множестве определенный элемент. Все.

Отсутствие порядка

У элементов этой коллекции нет номеров. Нельзя получить элемент по его индексу или записать значение в коллекцию по определенному индексу. Методов get() и set() у множества нет.

Уникальность элементов

Все элементы множества уникальны. В отличие от списка, во множестве один элемент может быть только раз. Объект или находится во множестве, или нет: третьего не дано. Нельзя во «множество цветов» трижды добавить «черный цвет». Он там либо есть, либо его нет.

Поиск элементов

Когда вы добавляете во множество новый элемент, удаляете элемент, или проверяете наличие элемента, внутри метода выполняется поиск элемента. Элементы коллекции и переданный элемент сравниваются сначала по hashCode(), а если hashCode() совпадают, по equals.



4. Сравнение коллекций: List vs Set

Давайте сравним коллекции двух типов: List и Set. В чем же их основные отличия и когда выгоднее использовать одну, а когда – вторую.

Давайте попробуем сравнить Список и Множество на примере детских игрушек.

Коллекция List (Список) похожа на набор игрушек в детской комнате, стоящих возле стены. Можно добавить игрушку в конец списка. Можно вставить и в середину, если очень нужно (но часть игрушек придется передвинуть).

У каждой игрушки есть порядковый номер. Можно взять игрушку по ее номеру или заменить игрушку номер 7 на игрушку номер 13. Можно удалить из списка игрушку номер 4. Ну и наконец, можно узнать количество всех игрушек в списке.

Коллекция Set (Множество) больше похожа на игрушки, сброшенные в кучу. В кучу можно добавить игрушку, можно удалить игрушку из кучи. Но фиксированного номера у таких игрушек нет.

Или допустим, вы выбираете ребенку игрушку на день рождения. Тогда вы в первую очередь думаете, есть у него такая игрушка или нет. Тогда все игрушки, которые у него есть, образуют множество игрушек, которые вы решили не покупать.

С этой точки зрения порядок игрушек в наборе «уже есть» не играет роли, как и наличие у именинника двух одинаковых игрушек. Вас интересуют не сами игрушки и их количество, а игрушки как набор неких уникальных объектов.

Вот для таких случаев вам и понадобится множество Set и его самый популярный представитель — класс HashSet.

Комментарии (272)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Семен Уровень 23
29 января 2026
29.01.2026 / 14 уровень
Grigoryvvv Уровень 17 Expert
19 января 2026
19.01.2026 / 14 уровень
Probably not playing Уровень 28
21 января 2026
😎🤘
Grigoryvvv Уровень 17 Expert
21 января 2026
БратишкЕ, молодЭц! ) Теперь газ в пол и не отпускай, рулём туда-сюда, туда-сюда ))
Александр Уровень 66
17 января 2026
В последней задачке небольшой нюанс. Из за упрощенного токенизирования текста через пробел, "Java" дублируется все-таки разок ("Java и Java:). Результат 19/15 и он принимается, а должен быть 19/14. Но не страшно. Суть в перегоне элементов из одной коллекции в другую и проходит все верно, ведь "Java и Java: технически для Set'а слова разные.
Роман Уровень 47
3 января 2026
Скажите честно, последнюю задачу ведь все подсмотрели решение?
Kismet Уровень 23
8 января 2026
Ну, я не особо понял условие, а так более менее понятно. Пришлось у чата спрашивать подсказку
Муриев Олег Уровень 28
12 января 2026
Не понял, а в чем трудность была?
C0N5P1RACY Уровень 1
20 декабря 2025
Смотрю на кучу лайков в последних комментариях, и полученные ачивки... Тоже хочется...😅 Надеюсь, тут соберутся лайки, что бы получить заветную ачивку 😀
invoker main Уровень 42
18 сентября 2025
снизу человек убедил тоже получить лайк для ачивки, накиньте, если не сложно заранее спасибо)
Duncan Уровень 25
10 сентября 2025
Долго противился, чтобы не просить в комментарии лайки, но тоже сдался. Мания получения ачивок в эту секунду одерживает победу надо мной. Если вам не сложно, накидайте 50 лайков пожалуйста 😁🙏. Всем желаю успехов в обучении и главное - получайте удовольствие! ☺️
Eugene Volkov Уровень 38
28 сентября 2025
эта тяга к лайкам мне напомнила анекдот. может немного не в тему, но надеюсь хоть кому-то зайдет. Мама с малышом лет 5 гуляет на улице и встречает подругу. Подруга дает ребенку конфету, а тот сразу раскрывает ее и начинает жевать. Мама так строго " а что надо сказать?" - намекая, что надо сказать спасибо. А ребенок смотрит на тетю и молвит "Дай еще" )
22 августа 2025
если уже и сравнивать сет и лист то сет это мэп но с заглушкой вместо значение и работает он под капотом точно так же как мапа, а аррайлист вообще расширенный массив с методами и авто расширением. Хотя это только аррайлист ибо другие листы в корне отличаются иплементацией
Georgy Уровень 16
27 июля 2025
не правильное сравнение set и list set строго упорядоченная коллекция в которой не может быть повторов вот и все а в list могут быть
Руслан Уровень 48
2 августа 2025
Set Это как раз таки не упорядоченная коллекция в отличии от List
Манэки-нэко Уровень 72
7 августа 2025
Только в HashSet нет порядка, в остальных коллекциях типа Set есть
Georgy Уровень 16
27 июля 2025
интерфейсы до коллекций надо проходить