Массивы
Массив в Java — это объект фиксированной длины, элементы которого имеют один и тот же тип. Длина задаётся при создании и не меняется. Индексация начинается с 0.
Java предоставляет утилитный класс java.util.Arrays со статическими методами для часто встречающихся операций: sort, binarySearch, copyOf, copyOfRange, fill, equals, toString, deepToString, stream, asList.
Создание и доступ
int[] a = new int[5]; // нули
int[] b = {2, 4, 5, 6, 8}; // литерал
int[][] m = new int[3][3]; // двумерный
Пример 1. Базовые операции с массивом
public class ArrayBasics {
public static void main(String[] args) {
int[] pins = {2, 4, 5, 6, 8, 12};
System.out.println("Длина: " + pins.length);
int sum = 0;
for (int p : pins) sum += p;
System.out.println("Сумма: " + sum);
pins[0] = 13;
System.out.println("Первый: " + pins[0]);
}
}
Output:
Длина: 6
Сумма: 37
Первый: 13
Пример 2. Arrays.toString и Arrays.sort
import java.util.Arrays;
public class ArraySortDemo {
public static void main(String[] args) {
int[] data = {42, 7, 19, 3, 28};
System.out.println("До: " + Arrays.toString(data));
Arrays.sort(data);
System.out.println("После: " + Arrays.toString(data));
}
}
Output:
До: [42, 7, 19, 3, 28]
После: [3, 7, 19, 28, 42]
Пример 3. binarySearch, fill, copyOfRange
import java.util.Arrays;
public class ArrayUtilsDemo {
public static void main(String[] args) {
int[] sorted = {3, 7, 19, 28, 42};
int idx = Arrays.binarySearch(sorted, 19);
System.out.println("Индекс 19: " + idx);
int[] copy = Arrays.copyOfRange(sorted, 1, 4);
System.out.println("Срез: " + Arrays.toString(copy));
int[] buf = new int[5];
Arrays.fill(buf, -1);
System.out.println("buf: " + Arrays.toString(buf));
}
}
Output:
Индекс 19: 2
Срез: [7, 19, 28]
buf: [-1, -1, -1, -1, -1]
Пример 4. Двумерный массив и deepToString
import java.util.Arrays;
public class ArrayMatrix {
public static void main(String[] args) {
int[][] m = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int trace = 0;
for (int i = 0; i < m.length; i++) trace += m[i][i];
System.out.println("Матрица: " + Arrays.deepToString(m));
System.out.println("След: " + trace);
}
}
Output:
Матрица: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
След: 15
Пример 5. asList и stream
import java.util.Arrays;
import java.util.List;
public class ArrayToList {
public static void main(String[] args) {
String[] kits = {"UNO", "ESP32", "Phobo"};
List<String> list = Arrays.asList(kits);
System.out.println("Список: " + list);
int[] nums = {10, 25, 7, 42};
int max = Arrays.stream(nums).max().getAsInt();
double avg = Arrays.stream(nums).average().getAsDouble();
System.out.println("max=" + max + ", avg=" + avg);
}
}
Output:
Список: [UNO, ESP32, Phobo]
max=42, avg=21.0
Пример 6. Сравнение массивов
import java.util.Arrays;
public class ArrayEquals {
public static void main(String[] args) {
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
int[] c = {3, 2, 1};
System.out.println("a == b ? " + (a == b)); // ссылки
System.out.println("Arrays.equals(a,b): " + Arrays.equals(a, b));
System.out.println("Arrays.equals(a,c): " + Arrays.equals(a, c));
int cmp = Arrays.compare(a, c);
System.out.println("Arrays.compare(a,c): " + cmp);
}
}
Output:
a == b ? false
Arrays.equals(a,b): true
Arrays.equals(a,c): false
Arrays.compare(a,c): -1
Подводные камни
System.out.println(arr)печатает «адрес» ([I@xxxx). Для содержимого —Arrays.toString(arr), для матриц —Arrays.deepToString(arr).Arrays.asList(arr)для массива примитивов (int[]) возвращаетList<int[]>из одного элемента. ИспользуйтеArrays.stream(int[])илиInteger[].Arrays.asListвозвращает список фиксированного размера —add/removeбросаютUnsupportedOperationException.binarySearchтребует отсортированного массива; иначе результат не определён.a == bсравнивает ссылки, а не содержимое.Размер массива нельзя изменить — нужна
Arrays.copyOfилиArrayList.ArrayIndexOutOfBoundsException— самая частая ошибка; всегда проверяйте границы.
См. также
Примечание
Материал подготовлен на основе официального руководства Oracle The Collections Framework и распространяется на условиях Oracle Free Documentation License. Тексты переписаны своими словами, примеры кода — оригинальные.