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

«Бесконечный массив» — ArrayList<T>

JAVA 25 SELF
12 уровень , 1 лекция
Открыта

1. Введение

Это первая лекция бонусного уровня. Мы уже вплотную приблизились к изучению ООП. И я хочу подогреть ваш интерес и немного забежать наперёд 😈. В текущем уровне я расскажу вам о 5 интересных вещах:

  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-коллекций, с которой вы познакомились. Я думаю, остальные вам тоже понравятся.

1
Задача
JAVA 25 SELF, 12 уровень, 1 лекция
Недоступна
Добавление и получение элемента
Добавление и получение элемента
1
Задача
JAVA 25 SELF, 12 уровень, 1 лекция
Недоступна
Замена и удаление элементов
Замена и удаление элементов
1
Задача
JAVA 25 SELF, 12 уровень, 1 лекция
Недоступна
Проверка наличия элемента в списке
Проверка наличия элемента в списке
1
Задача
JAVA 25 SELF, 12 уровень, 1 лекция
Недоступна
Список дел с вводом пользователя
Список дел с вводом пользователя
Комментарии (6)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Yaroslav Уровень 39
26 ноября 2025
Задачи перестали быть наполовину решёнными? Круто
Riga Уровень 24
1 ноября 2025
отличная лекция!
akanorei Уровень 1
31 октября 2025
Надеюсь, формулировка и пресет заданий будет такой же и далее
Ksanders Уровень 32
15 октября 2025
Хорошая лекция, ничего лишнего, бонусный уровень как глоток свежего воздуха.
Dthmth Уровень 11
26 октября 2025
Стоит ещё отметить, что и формулировка задания и проверок нормальная. Не предоставляется сразу готового решения, где все написано
САН САНЫЧ Уровень 16
21 декабря 2025
согласен