Примитивные типы данных, с которыми мы работали до сих пор, невозможно изменить. Любые функции и методы над ними возвращают новые значения, но не могут ничего сделать со старым.
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]
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.