1. Контейнери та колекції
Контейнерами або колекціями називають класи, які дають змогу зберігати й обробляти багато об'єктів одразу. Ви вже знаєте два різновиди контейнерів — масиви та списки.
У Java є кілька десятків колекцій, кожна з яких зберігає елементи у свій особливий спосіб. Ця таблиця містить скорочений перелік колекцій:
Тип колекції | Клас | Опис |
---|---|---|
|
|
Список |
|
Зв'язаний список | |
|
Вектор | |
|
Стек (стос) | |
|
|
Множина |
|
||
|
||
|
|
Черга |
|
||
|
|
Карта/Словник |
|
||
|
Тут є певна неоднозначність у назвах. Хоча в більшості мов програмування всі ці структури даних називають колекціями, у Java це не так. У мові Java деякі з цих класів реалізують інтерфейс Collection
, а інші — ні.
Тому колекції розділили на колекції в широкому сенсі й колекції у вузькому сенсі (тільки ті, які реалізують інтерфейс Collection
).
Отже, щоб не плутатися, колекціями називають тільки колекції у вузькому сенсі (класи мають реалізовувати інтерфейс Collection
). Це всі колекції типів List
, Set
і Queue
. А колекції в широкому сенсі називають контейнерами. Це класи типу Map
і масиви.
2. Колекція HashSet
Клас HashSet
є типовим представником колекцій типу «множина». Багато в чому він схожий на клас ArrayList
і в певному сенсі є його спрощеною версією.
Створити об'єкт типу HashSet
можна за допомогою такої команди:
HashSet<Тип> ім'я = new HashSet<Тип>();
де тип — це тип елементів, які можна зберігати в колекції HashSet
.
Клас HashSet
має такі методи:
Метод | Опис |
---|---|
|
Додає елемент value в колекцію |
|
Видаляє елемент value з колекції.Повертає true , якщо такий елемент там був. |
|
Перевіряє, чи є в колекції елемент value |
|
Очищає колекцію: видаляє всі елементи |
|
Повертає кількість елементів у колекції |
Приклад використання множини.
Спробуймо написати програму, яка прощається з користувачем, якщо він з нею привітався, тобто сказав «Привіт». Щоб було цікавіше, слово «Привіт» можна буде сказати декількома мовами.
Код | Примітка |
---|---|
|
Створюємо об'єкт типу HashSet , який зберігає елементи типу String .Записуємо в set привітання різними мовами.Вводимо з консолі слово; якщо це слово є в нашій множині привітань, то прощаємося (білоруською мовою). |
3. Множина
Колекція Set
призначена для зберігання множини елементів. Тому її так і називають: Set
(множина). Ця колекція має три особливості.
Операції з множинами
Із множинами можна виконувати тільки три операції: додавати елементи до множини, видаляти елементи з множини і перевіряти, чи є в множині певний елемент. Це все.
Невпорядкованість
Елементи цієї колекції не мають номерів. Неможливо отримати елемент за його індексом або записати значення в колекцію за певним індексом. Методів get()
і set()
множина також не має.
Унікальність елементів
Усі елементи множини є унікальними. На відміну від списку, у множині кожний елемент може бути тільки в одному примірнику. Об'єкт або міститься у множині, або ні: третього не дано. Неможливо тричі додати «чорний колір» у множину кольорів. Він там або є, або його немає.
Пошук елементів
Коли ви додаєте до множини новий елемент, видаляєте елемент або перевіряєте наявність елемента, всередині методу виконується пошук елемента. Елементи колекції та переданий елемент порівнюються спочатку за допомогою методу hashCode()
, а якщо отримані хеш-значення
збігаються, то за допомогою методу equals
.
4. Порівняння колекцій: List
і Set
Порівняймо колекції двох типів: List
і Set
. Які між ними основні відмінності, і коли вигідніше використовувати одну, а коли — другу?
Спробуймо порівняти Список і Множину на прикладі дитячих іграшок.
Колекція List
(Список) схожа на набір іграшок в дитячій кімнаті, які розставлено біля стіни. Можна додати іграшку в кінець списку. Можна вставити її в середину, якщо дуже потрібно (але частину іграшок доведеться пересунути).
Кожна іграшка має порядковий номер. Можна взяти іграшку за її номером або замінити іграшку номер 7 на іграшку номер 13. Можна видалити зі списку іграшку номер 4. Ну і зрештою можна дізнатися кількість усіх іграшок у списку.
Колекція Set
(множина) більше схожа на іграшки, скинуті на купу. У купу можна додати іграшку, можна видалити іграшку з купи, але фіксованого номера в таких іграшок немає.
Або, припустімо, ви вибираєте дитині іграшку на день народження. Тоді ви в першу чергу думаєте, є в дитини така іграшка чи ні. Тож усі іграшки, які в неї є, утворюють множину іграшок, які ви не купуватимете.
У такому разі порядок іграшок в наборі «Вже є» не має значення, так само як і наявність в іменинника двох однакових іграшок. Вас цікавлять не самі іграшки та їх кількість, а іграшки як набір певних унікальних об'єктів.
Саме для таких випадків вам і знадобиться множина Set
та її найпопулярніший представник — клас HashSet
.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ