Массивы

Массив в 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. Тексты переписаны своими словами, примеры кода — оригинальные.