Инициализация массивов в Java

1. Обзор

В этом кратком руководстве мы увидим различные способы инициализации массива и тонкие различия между ними.

2. Один элемент за раз

Начнем с простого метода на основе цикла:

for (int i = 0; i < array.length; i++) { array[i] = i + 2; }

И давайте также посмотрим, как мы можем инициализировать многомерный массив по одному элементу за раз:

for (int i = 0; i < 2; i++) { for (int j = 0; j < 5; j++) { array[i][j] = j + 1; } }

3. Во время объявления

Давайте теперь инициализируем массив во время объявления:

String array[] = new String[] { "Toyota", "Mercedes", "BMW", "Volkswagen", "Skoda" };

При создании экземпляра массива нам не нужно указывать его тип:

int array[] = { 1, 2, 3, 4, 5 };

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

4. Использование Arrays.fill ()

Класс java.util.Arrays имеет несколько методов с именем fill (), которые принимают разные типы аргументов и заполняют весь массив одним и тем же значением:

long array[] = new long[5]; Arrays.fill(array, 30);

У этого метода также есть несколько альтернатив, которые устанавливают диапазон массива для определенного значения:

int array[] = new int[5]; Arrays.fill(array, 0, 3, -50);

Обратите внимание, что метод принимает массив, индекс первого элемента, количество элементов и значение.

5. Использование Arrays.copyOf ()

Метод Arrays.copyOf () создает новый массив путем копирования другого массива. Этот метод имеет множество перегрузок, которые принимают разные типы аргументов.

Давайте посмотрим на быстрый пример:

int array[] = { 1, 2, 3, 4, 5 }; int[] copy = Arrays.copyOf(array, 5);

Несколько примечаний здесь:

  • Метод принимает исходный массив и длину создаваемой копии.
  • Если длина больше, чем длина копируемого массива, то дополнительные элементы будут инициализированы с использованием значений по умолчанию.
  • Если исходный массив не инициализирован, то NullPointerException выкинут
  • Если длина исходного массива является отрицательным, то NegativeArraySizeException брошено

6. Использование Arrays.setAll ()

Метод Arrays.setAll () устанавливает все элементы массива с помощью функции генератора:

int[] array = new int[20]; Arrays.setAll(array, p -> p > 9 ? 0 : p); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

Если функция генератора имеет значение NULL, генерируется исключение NullPointerException .

7. Использование ArrayUtils.clone ()

Наконец, давайте воспользуемся API ArrayUtils.clone () из Apache Commons Lang 3, который инициализирует массив, создав прямую копию другого массива:

char[] array = new char[] {'a', 'b', 'c'}; char[] copy = ArrayUtils.clone(array);

Обратите внимание, что этот метод перегружен для всех примитивных типов.

8. Заключение

В этой статье мы изучили различные способы инициализации массивов в Java.

Как всегда, полная версия кода доступна на GitHub.