1. Вступ
Це перша лекція бонусного рівня. Ви вже впритул підійшли до вивчення ООП. Хочу зацікавити вас і трохи зазирнути наперед. На цьому рівні я розповім вам про п’ять цікавих тем:
- Ви навчитеся створювати «нескінченні» масиви
- Вестимете власний словник
- Трохи познайомитеся з роботою з файлами
- Навчитеся завантажувати зображення з Інтернету
- У завершальній лекції рівня ви стежитимете за космічною станцією МКС у реальному часі
Як усе це працює «під капотом», дізнаєтеся на наступних рівнях, а сьогодні ви просто навчитеся користуватися інструментами, які я підготував. Зацікавлені? Починаємо.
Нагадування: звичайні масиви
Пригадайте, як виглядає звичайний масив у Java:
int[] arr = new int[10];
Це корисна конструкція, але має кілька обмежень: розмір фіксований, а додати чи видалити елемент без створення нового масиву неможливо. А іноді потрібен масив, що зростає або зменшується за потреби. У такому разі виручає динамічний масив — ArrayList!
ArrayList — це «розумний» масив, який може автоматично зростати й зменшуватися. На відміну від звичайного масиву з фіксованим розміром, ArrayList сам піклується про те, щоб у ньому вистачало місця для нових елементів.
Створюємо «нескінченний» масив
Щоб створити ArrayList, потрібно написати такий код:
ArrayList<String> array = new ArrayList<String>();
Після цього в нього можна додавати елементи:
array.add("Марія");
array.add("Катерина");
Створюємо динамічний масив для цілих чисел
Як ви вже, можливо, здогадалися, тип елементів динамічного масиву вказується в кутових дужках. Там можна вказати будь‑який тип, окрім примітивних типів: їх слід замінити на типи‑обгортки.
Приклад:
ArrayList<Integer> numbers = new ArrayList<Integer>(); // int
ArrayList<Double> fees = new ArrayList<Double>(); // double
ArrayList<Boolean> yesList = new ArrayList<Boolean>(); // boolean
ArrayList<Character> chars = new ArrayList<Character>(); // char
ArrayList не підтримує звернення через квадратні дужки [index], але в нього є спеціальні методи, які задовольняють усі типові потреби. Розглянемо найважливіші з них.
2. Метод add(element) — додавання елемента
Насамперед до списку зазвичай додають дані. Для цього служить метод add. Він додає елемент у кінець списку.
ArrayList<String> todo = new ArrayList<>(); // список справ
todo.add("Вивчити ArrayList");
todo.add("Заварити чай");
todo.add("Прогулятися");
Після цих трьох рядків у вас буде список із трьох елементів. На відміну від масиву, не потрібно вказувати розмір заздалегідь — він зростає автоматично у міру додавання.
Дуже зручно: можна почати з порожнього списку й поступово наповнювати його залежно від дій користувача або вхідних даних програми.
3. Метод get(index) — доступ за індексом
Кожен елемент списку має свій порядковий номер — індекс. Індексація завжди починається з нуля. Тобто перший елемент має номер 0, другий — номер 1 і так далі.
Якщо ви хочете отримати елемент за номером, використовуйте метод get.
String task = todo.get(1);
System.out.println("Друга справа: " + task);
Вивід:
Друга справа: Заварити чай
Важливо запамʼятати: якщо звернутися до індексу, якого не існує (наприклад, todo.get(10) при списку з трьох елементів), програма згенерує виняток IndexOutOfBoundsException. Тому завжди або будьте впевнені в індексі, або перевіряйте розмір списку методом size().
4. Метод set(index, element) — заміна елемента
Іноді елемент у списку потрібно замінити. У такому разі не потрібно видаляти й додавати заново — достатньо використати метод set.
todo.set(1, "Зварити каву");
System.out.println("Тепер друга справа: " + todo.get(1));
Вивід:
Тепер друга справа: Зварити каву
Отже, set — це спосіб оновити список «на льоту».
5. Метод remove(index) — видалення елемента
Видалити елемент із ArrayList можна за індексом.
todo.remove(0);
System.out.println("Перша справа тепер: " + todo.get(0));
Вивід:
Перша справа тепер: Зварити каву
Ми видалили перший елемент (індекс 0). Тепер другий став першим, а третій — другим. Важливий момент: після видалення елементи списку зсуваються.
Це може стати несподіванкою для новачків. Завжди враховуйте, що після видалення індекси перераховуються.
6. Метод size() — дізнатися розмір списку
Метод size повертає кількість елементів у списку. Це схоже на властивість length у масивах, але в ArrayList — це метод.
System.out.println("Усього справ: " + todo.size());
Вивід:
Усього справ: 2
Часто size використовують у циклах, щоб перебрати всі елементи:
for (int i = 0; i < todo.size(); i++)
{
System.out.println(todo.get(i));
}
7. Метод contains(element) — перевірка наявності
Щоб дізнатися, чи є в списку потрібний елемент, можна скористатися contains. Цей метод повертає true або false.
System.out.println(todo.contains("Прогулятися"));
System.out.println(todo.contains("Заварити чай"));
Вивід:
true
false
Це дуже корисний метод, коли ви хочете уникнути дублікатів або перевірити, чи містить список певний елемент.
8. Перебирання елементів
Є два способи пройтися списком.
Цикл за індексом
Цей спосіб зручний, якщо вам важливий номер елемента.
for (int i = 0; i < todo.size(); i++)
{
System.out.println(i + ": " + todo.get(i));
}
Цикл for‑each
Якщо номер не важливий, а ви просто хочете переглянути всі елементи, скористайтеся циклом for‑each.
for (String task : todo)
{
System.out.println("Справа: " + task);
}
Такий цикл коротший і легший для читання.
9. Практика: ArrayList у вашому застосунку
Створимо простий список справ, який можна поповнювати й виводити:
import java.util.ArrayList;
import java.util.Scanner;
public class TodoApp
{
public static void main(String[] args)
{
ArrayList<String> todo = new ArrayList<>();
Scanner console = new Scanner(System.in);
while (true)
{
System.out.print("Введіть справу (або порожній рядок для виходу): ");
String task = console.nextLine();
if (task.isEmpty()) break;
todo.add(task);
}
System.out.println("Ваш список справ:");
for (int i = 0; i < todo.size(); i++)
{
System.out.println((i + 1) + ". " + todo.get(i));
}
}
}
Сподіваюся, вам сподобався наш «нескінченний» масив. Це — одна з перших Java‑колекцій, із якою ви познайомилися. Наступні — ще цікавіші.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ