Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Класс Arrays

Класс Arrays из пакета java.util собирает готовые методы для работы с массивами: вывод, сортировку, заполнение, копирование и сравнение. Пакет — это группа связанных классов. В короткой форме программы java.util подключён автоматически, а в классической нужна строка import java.util.Arrays;.

toString

Arrays.toString() превращает массив в читаемую строку. Он нужен в каждом примере ниже, чтобы увидеть результат:

void main() {
    String[] cities = {"Рим", "Париж", "Берлин"};
    IO.println(Arrays.toString(cities));
}

Результат:

[Рим, Париж, Берлин]

sort

Arrays.sort() сортирует массив по возрастанию. Он меняет сам массив и ничего не возвращает. Строки сортируются по алфавиту:

void main() {
    int[] prices = {40, 15, 99, 3};
    Arrays.sort(prices);
    IO.println(Arrays.toString(prices));
 
    String[] names = {"Олег", "Анна", "Мария"};
    Arrays.sort(names);
    IO.println(Arrays.toString(names));
}

Результат:

[3, 15, 40, 99]
[Анна, Мария, Олег]

Чтобы отсортировать в другом порядке, например по убыванию или по длине строки, нужен компаратор — о нём урок о сортировке коллекций.

fill

Arrays.fill() записывает одно значение во все элементы массива. Удобно, когда значение по умолчанию не подходит:

void main() {
    char[] line = new char[10];
    Arrays.fill(line, '-');
    IO.println(new String(line));
}

Результат:

----------

new String(line) собирает строку из массива символов. Есть и версия для части массива: Arrays.fill(line, 0, 3, '*') заполнит только индексы с 0 по 2.

Копирование

Длину массива изменить нельзя, но можно сделать копию нужного размера. Arrays.copyOf() берёт начало массива и дополняет копию значениями по умолчанию, если она длиннее. Arrays.copyOfRange() копирует отрезок от индекса включительно до индекса не включительно:

void main() {
    int[] numbers = {1, 2, 3, 4, 5};
    IO.println(Arrays.toString(Arrays.copyOf(numbers, 3)));
    IO.println(Arrays.toString(Arrays.copyOf(numbers, 7)));
    IO.println(Arrays.toString(Arrays.copyOfRange(numbers, 1, 4)));
}

Результат:

[1, 2, 3]
[1, 2, 3, 4, 5, 0, 0]
[2, 3, 4]

Исходный массив при этом не меняется.

Сравнение и поиск

Arrays.equals() сравнивает массивы поэлементно. Arrays.binarySearch() быстро находит индекс значения, но только в отсортированном массиве:

void main() {
    int[] a = {1, 2, 3};
    int[] b = {1, 2, 3};
    IO.println(Arrays.equals(a, b));
 
    int[] sorted = {10, 20, 30, 40};
    IO.println(Arrays.binarySearch(sorted, 30));
}

Результат:

true
2

Если значения нет, binarySearch() возвращает отрицательное число.

Частая ошибка

Массивы нельзя сравнивать через == или метод equals() самого массива. Оба проверяют, один ли это объект, а не одинаковое ли содержимое:

void main() {
    int[] a = {1, 2, 3};
    int[] b = {1, 2, 3};
    IO.println(a == b);
    IO.println(a.equals(b));
    IO.println(Arrays.equals(a, b));
}

Результат:

false
false
true

Для сравнения содержимого всегда используйте Arrays.equals(), а для двумерных массивов — Arrays.deepEquals().

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.