Зарегистрируйтесь, чтобы продолжить обучение

Модификация Java: Массивы

Примитивные типы данных, с которыми мы работали до сих пор, невозможно изменить. Любые функции и методы над ними возвращают новые значения, но не могут ничего сделать со старым.

var name = "Hexlet";
name.toUpperCase(); // "HEXLET"
// Значение name не поменялось
System.out.println(name); // => Hexlet

С массивами это правило не работает. Элементы массива можно изменять, записывая туда другие значения. Синтаксис изменения элемента массива практически такой же, как и при обращении к элементу массива. Разница лишь в наличии присваивания:

import java.util.Arrays;

String[] animals = { "cats", "dogs", "birds" };
// Меняется первый элемент массива
animals[0] = "horses";
System.out.println(Arrays.toString(animals));
// => [horses, dogs, birds]

// Если индекса не существует, то получим ошибку
animals[5] = "monkeys";
| Exception java.lang.ArrayIndexOutOfBoundsException:
| Index 5 out of bounds for length 3

Точно так же можно инициализировать новый массив:

// Создается массив из 5 чисел
int[] numbers = new int[5];

// Порядок заполнения не важен
numbers[1] = 8;
numbers[0] = 3;

Созданный, но не инициализированный массив наполняется значениями по умолчанию. Для каждого типа это свое значение:

boolean : false
int     : 0
double  : 0.0
String  : null

Например, для строк:

String[] cars = new String[2];
System.out.println(cars[0]); // => null

Изменение размера массива

Массивы в Java имеют фиксированную длину. Это связано с тем, как хранятся массивы в памяти. Каждый раз когда нужно изменить размер массива, что-то добавить или удалить, придется создавать новый массив куда копируются нужные значения из старого. В следующих уроках мы рассмотрим как конкретно это происходит, а сейчас поработаем уже с готовыми методами. Обработка массивов хорошо реализована в библиотеке Apache Commons Lang.

import org.apache.commons.lang3.ArrayUtils;
import java.util.Arrays;

String[] animals = { "cats", "dogs", "birds" };

// Добавление элементов

var animals2 = ArrayUtils.add(animals, "horse");
System.out.println(Arrays.toString(animals2));
// => [cats, dogs, birds, horse]

// Исходный массив не поменялся
System.out.println(Arrays.toString(animals));
// => [cats, dogs, birds]

// Удаление элементов

// Удаляем элемент с index = 1
var animals3 = ArrayUtils.remove(animals, 1);
System.out.println(Arrays.toString(animals3));
// => [cats, birds]

// Удаляем элемент с index = 0
var animals4 = ArrayUtils.remove(animals, 0);
System.out.println(Arrays.toString(animals4));
// => [dogs, birds]

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
Программирование на Java, Разработка веб-приложений и микросервисов используя Spring Boot, проектирование REST API
10 месяцев
с нуля
Старт 26 декабря

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»