Инициализация массивов в 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]
Если функция генератора равна нулю, то выдаетсяNullPointerException.
7. ИспользуяArrayUtils.clone()
Наконец, давайте воспользуемся APIArrayUtils.clone() из Apache Commons Lang 3, который инициализирует массив, создав прямую копию другого массива:
char[] array = new char[] {'a', 'b', 'c'};
char[] copy = ArrayUtils.clone(array);
Обратите внимание, что этот метод перегружен для всех примитивных типов.
8. Заключение
В этой статье мы исследовали различные способы инициализации массивов в Java.
Как всегда доступна полная версия кодаover on GitHub.