JavaRush /Курси /JAVA 25 SELF /«Нескінченний масив» — ArrayList<T>

«Нескінченний масив» — ArrayList<T>

JAVA 25 SELF
Рівень 12 , Лекція 1
Відкрита

1. Вступ

Це перша лекція бонусного рівня. Ви вже впритул підійшли до вивчення ООП. Хочу зацікавити вас і трохи зазирнути наперед. На цьому рівні я розповім вам про п’ять цікавих тем:

  1. Ви навчитеся створювати «нескінченні» масиви
  2. Вестимете власний словник
  3. Трохи познайомитеся з роботою з файлами
  4. Навчитеся завантажувати зображення з Інтернету
  5. У завершальній лекції рівня ви стежитимете за космічною станцією МКС у реальному часі

Як усе це працює «під капотом», дізнаєтеся на наступних рівнях, а сьогодні ви просто навчитеся користуватися інструментами, які я підготував. Зацікавлені? Починаємо.

Нагадування: звичайні масиви

Пригадайте, як виглядає звичайний масив у 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‑колекцій, із якою ви познайомилися. Наступні — ще цікавіші.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ