1. Клас ArrayList
Сьогодні ми вивчимо клас ArrayList. Це перший клас із так званих колекцій. Колекції в Java — настільки ємка й корисна річ, що їм присвячено цілий квест на JavaRush.
Щоб повністю зрозуміти, як влаштовано колекції, і опанувати всі особливості роботи з ними, потрібно спочатку вивчити ООП, інтерфейси, успадкування, ази багатонитковості й багато іншого.
Тому сьогодні ми просто ознайомимося з найпростішої колекцією, натомість на досить глибокому рівні, щоб ви розуміли, як нею користуватися та як вона працює. Отже, зустрічайте: колекція ArrayList.
Передісторія
Почну з невеличкої передісторії. Програмістам дуже не подобалася одна властивість масиву — його розмір не можна змінювати. Що робити, якщо потрібно зберегти в масиві ще три елементи, а вільне місце лише одне?
Єдиним розв'язанням проблеми браку місця в масиві було створення масиву дуже великого розміру, щоб усі елементи туди точно вмістилися. Проте це часто спричиняло нераціональні витрати пам'яті. Якщо зазвичай у масиві зберігалося два-три елементи, але існувала хоча б мізерна ймовірність, що їх там буде 100, доводилося створювати масив на 100 елементів.
І що ж придумали програмісти? Вони написали клас ArrayList (масив-список), який виконував ту саму роботу, що й Array (масив), але міг змінювати свій розмір.
Клас ArrayList
Сама назва ArrayList походить від двох слів: Array + List. Array — це масив, а List — список.
Усередині кожного об'єкта типу ArrayList зберігається звичайний масив елементів. Коли ви зчитуєте елементи з ArrayList, він зчитує їх зі свого внутрішнього масиву. Коли записуєте — записує їх у внутрішній масив.
У класу ArrayList відсутні всі недоліки, притаманні масивам. Він уміє:
- Зберігати елементи певного типу
- Динамічно змінювати розмір списку
- Додавати елементи в кінець списку
- Вставляти елементи в початок і в середину списку
- Видаляти елементи з будь-якого місця списку
Докладніше — нижче:
2. Створення об’єкта ArrayList
Щоб створити об'єкт класу ArrayList, потрібно написати отакий код:
ArrayList<Тип> ім'я = new ArrayList<Тип>();
де ArrayList — це тип/клас колекції, Тип — це тип елементів, які зберігаються в колекції ArrayList, а ім'я — це ім'я змінної типу ArrayList<Тип>.
Тип змінної ім'я складений — він складається аж із двох типів: спочатку вказують тип колекції, а в трикутних дужках — тип елементів, які ця колекція зберігає.
Приклади:
| Код | Опис |
|---|---|
|
Список цілих чисел |
|
Список рядків |
|
Список дійсних чисел |
Колекції, на відміну від масивів, не можуть зберігати примітивні типи: тільки типи-класи. Тому якщо вам потрібна колекція зі значеннями типу int, використовуйте замість нього клас-обгортку — Integer.
3. Операції з ArrayList
Спочатку довжина щойно створеного списку дорівнює нулю: він містить 0 елементів. Якщо до списку додати один елемент, довжина списку збільшиться на 1. Якщо видалити доданий елемент, довжина знову зменшиться до нуля.
Докладніше дізнатися про методи класу ArrayList можна з таблиці:
| Методи | Опис |
|---|---|
|
Додає до списку переданий елемент |
|
Додає елемент на певне місце у списку |
|
Повертає елемент із номером index |
|
Змінює значення елемента з номером index на value |
|
Видаляє елемент із номером index. Повертає видалений елемент. |
|
Видаляє елемент: потрібно передати сам елемент у список. Якщо таких елементів декілька, буде видалено перший з них |
|
Очищає список — видаляє всі елементи зі списку |
|
Перевіряє, чи міститься в списку елемент value |
|
Перевіряє, порожній список чи ні (чи дорівнює довжина списку нулю) |
|
Повертає розмір списку — кількість елементів списку |
|
Повертає масив, який містить ті самі елементи, що й список. Масив потрібно передати в метод |
Ці методи дають змогу виконувати зі списком практично всі можливі операції: міняти елементи місцями, додавати елементи, видаляти елементи. Можна навіть очистити список за допомогою однієї команди або перетворити список на масив.
4. Порівняння ArrayList і Array
Гадаю, без порівняння ArrayList і масиву нам не обійтися.
Фактично з масивом можна виконувати лише 4 дії:
- Створення масиву
- Отримання елемента за номером
- Встановлення елемента в масиві за номером
- Отримання довжини масиву
Ось аналоги операцій у масиві та в ArrayList:
| Масив | ArrayList |
|---|---|
|
|
|
|
|
|
|
|
Порівняймо роботу ArrayList і роботу з масивом. Для прикладу розв'яжімо таку задачу: «Ввести 10 рядків з клавіатури й вивести їх на екран у зворотному порядку».
| Використовуємо Array (масив) | Використовуємо ArrayList |
|---|---|
|
|
Загалом можна провести точну аналогію, причому в масиві все виглядає нібито коротше й зрозуміліше. Але й в ArrayList не надто складно: отримати елемент — метод get(), змінити елемент — метод set(), отримати довжину списку — метод size().
Тож навіщо програмісти використовують клас ArrayList?
Звичайно ж, основна причина в інших методах, яких у масиву немає й не буде:
- Додавання елемента до списку
- Додавання елемента в середину списку
- Пошук елемента в списку
- Видалення елемента зі списку
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ