1. Клас ArrayList
Сьогодні ми вивчимо клас ArrayList. Це перший клас із так званих колекцій. Колекції в Java — настільки обширна і корисна штука, що їй присвячено цілий квест на CodeGym.
Щоб повністю зрозуміти, як влаштовані колекції і всі нюанси їх роботи, потрібно спочатку вивчити ООП, інтерфейси, наслідування, основи багатопоточності та багато іншого.
Тож сьогодні ми просто познайомимося з найпростішою колекцією. Але на досить глибокому рівні, щоб ти розумів, як нею користуватися і як вона працює. Отже, знайомся: колекція 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?
Звісно ж, вся справа в інших методах, яких у масиву немає і не буде:
- Додавання елемента в список
- Вставка елемента в середину списку
- Пошук елемента в списку
- Видалення елемента зі списку
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ