JavaRush/Курсы/JAVA 25 SELF/Класс Arrays: sort, fill, copyOf, equals

Класс Arrays: sort, fill, copyOf, equals

Открыта

1. Введение

Массивы в Java — мощный инструмент, но базовый синтаксис быстро упирается в рутину. На помощь приходит класс java.util.Arrays — набор статических методов для работы с массивами: сортировка, копирование, сравнение, форматированный вывод и не только. Экземпляры создавать не нужно — все методы статические и вызываются через имя класса.

Чтобы использовать методы, добавьте импорт в начало файла:

import java.util.Arrays;

Если забыть импорт, компилятор пожалуется, что Arrays «не найден» — это не баг, а ожидаемое поведение без импорта.

2. Сортировка массива: Arrays.sort

Как работает Arrays.sort

Синтаксис

Arrays.sort(массив);
Arrays.sort(массив, начальныйИндекс, конечныйИндекс);
Сортировка всего массива или поддиапазона

Метод сортирует «на месте» — изменяет исходный массив и не возвращает новый. Хотите сохранить оригинальный порядок? Сначала скопируйте массив.

Пример: сортировка массива целых чисел

int[] scores = {5, 2, 9, 1, 7};
Arrays.sort(scores); // Сортируем по возрастанию

System.out.println("Отсортированный массив: " + Arrays.toString(scores));
// Выведет: [1, 2, 5, 7, 9]

Пример: сортировка массива строк

String[] names = {"Вася", "Петя", "Аня", "Игорь"};
Arrays.sort(names);

System.out.println(Arrays.toString(names));
// [Аня, Вася, Игорь, Петя]

Важно: строки сортируются лексикографически (по алфавиту), числа — по возрастанию.

Сортировка части массива

int[] arr = {7, 5, 3, 1, 9, 8};
Arrays.sort(arr, 1, 4); // сортирует элементы с индекса 1 до 3 включительно (4 не включается)

System.out.println(Arrays.toString(arr));
// [7, 1, 3, 5, 9, 8]

Особенности

  • Сортировка «на месте»: исходный массив меняется.
  • Числа — по возрастанию, строки — по алфавиту.
  • Для сложных объектов используйте перегрузки с компаратором.

3. Заполнение массива: Arrays.fill

Синтаксис

Arrays.fill(массив, значение);
Arrays.fill(массив, начальныйИндекс, конечныйИндекс, значение);
Заполнение всего массива или диапазона одним значением

Метод заполняет все элементы или указанную часть массива одним и тем же значением.

int[] marks = new int[5];
Arrays.fill(marks, 3); // Все элементы теперь равны 3
System.out.println(Arrays.toString(marks)); // [3, 3, 3, 3, 3]

Заполнение части массива

int[] arr = new int[10];
Arrays.fill(arr, 2, 5, 7); // Заполнит элементы с индекса 2 до 4 включительно (5 не включается)
System.out.println(Arrays.toString(arr));
// [0, 0, 7, 7, 7, 0, 0, 0, 0, 0]

Заполнение массива строк

String[] guests = new String[4];
Arrays.fill(guests, "Пусто");
System.out.println(Arrays.toString(guests)); // [Пусто, Пусто, Пусто, Пусто]

4. Копирование массива: Arrays.copyOf и Arrays.copyOfRange

Arrays.copyOf

Синтаксис

Arrays.copyOf(исходныйМассив, новаяДлина);
Создание новой копии с указанной длиной

Создаёт новый массив и копирует элементы из исходного. Если новая длина больше исходной, «хвост» заполняется значениями по умолчанию (0 для int, null для ссылочных).

int[] original = {1, 2, 3};
int[] copy = Arrays.copyOf(original, 5);
System.out.println(Arrays.toString(copy)); // [1, 2, 3, 0, 0]

Уменьшение массива

int[] shortCopy = Arrays.copyOf(original, 2);
System.out.println(Arrays.toString(shortCopy)); // [1, 2]

Arrays.copyOfRange

Синтаксис

Arrays.copyOfRange(исходныйМассив, начальныйИндекс, конечныйИндекс);
Копирование подмассива в новый массив
int[] arr = {10, 20, 30, 40, 50};
int[] mid = Arrays.copyOfRange(arr, 1, 4); // Скопирует элементы с индекса 1 по 3
System.out.println(Arrays.toString(mid)); // [20, 30, 40]

5. Сравнение массивов: Arrays.equals и Arrays.deepEquals

В Java нельзя сравнивать массивы через == — так сравниваются ссылки, а не содержимое:

int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(a == b); // false!

Как сравнивать содержимое?

Arrays.equals(массив1, массив2);
Arrays.deepEquals(матрица1, матрица2);
Поверхностное и глубокое сравнение
System.out.println(Arrays.equals(a, b)); // true

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

Пример: сравнение двумерных массивов

int[][] matrix1 = {{1, 2}, {3, 4}};
int[][] matrix2 = {{1, 2}, {3, 4}};

System.out.println(Arrays.equals(matrix1, matrix2));     // false!
System.out.println(Arrays.deepEquals(matrix1, matrix2)); // true

6. Красивый вывод массива: Arrays.toString и Arrays.deepToString

Прямой вывод массива даст нечитабельную строку:

int[] arr = {1, 2, 3};
System.out.println(arr); // [I@7a81197d

Синтаксис

Arrays.toString(массив);
Arrays.deepToString(матрица);
Форматированный вывод одномерных и многомерных массивов
System.out.println(Arrays.toString(arr)); // [1, 2, 3]
int[][] matrix = {{1, 2}, {3, 4}};
System.out.println(Arrays.deepToString(matrix)); // [[1, 2], [3, 4]]

7. Типичные ошибки при работе с классом Arrays

Ошибка №1: попытка сравнить массивы через ==
Массивы — объекты, и == сравнивает только ссылки. Даже при одинаковых значениях результат будет false. Используйте Arrays.equals (для одномерных) или Arrays.deepEquals (для многомерных).

Ошибка №2: забыли, что сортировка меняет массив «на месте»
Если нужен исходный порядок, сначала сделайте копию Arrays.copyOf, а уже потом сортируйте копию. Иначе оригинал потеряет свой порядок.

Ошибка №3: неверное понимание границ в Arrays.fill и Arrays.copyOfRange
Методы используют полуоткрытый диапазон: правый индекс не включается. Например, Arrays.fill(arr, 2, 5, 9) заполнит индексы 2, 3, 4, а элемент с индексом 5 не тронет.

Ошибка №4: попытка вывести массив напрямую
Вызов System.out.println(arr) печатает техническое представление. Используйте Arrays.toString для одномерных и Arrays.deepToString для многомерных массивов.

Ошибка №5: сравнение многомерных массивов через Arrays.equals
Метод сравнивает только верхний уровень (ссылки на внутренние массивы). Для содержимого используйте Arrays.deepEquals.

1
Задача
JAVA 25 SELF,  7 уровень,  5 лекция
Недоступна
Упорядочивание результатов забега 🏃‍♂️
Упорядочивание результатов забега 🏃‍♂️
1
Задача
JAVA 25 SELF,  7 уровень,  5 лекция
Недоступна
Инициализация пустых складских ячеек 📦
Инициализация пустых складских ячеек 📦
1
Задача
JAVA 25 SELF,  7 уровень,  5 лекция
Недоступна
Извлечение центральных показаний с метеостанции ☀️
Извлечение центральных показаний с метеостанции ☀️
1
Задача
JAVA 25 SELF,  7 уровень,  5 лекция
Недоступна
Сверка секретных кодов доступа 🔐
Сверка секретных кодов доступа 🔐
Комментарии (14)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
yaarrooslav
Уровень 22
11 апреля, 15:20
подскажите?
KEN Software Developer
16 апреля, 15:56
B и C. Это было показано в лекциях ранее.
Cherepoq
Уровень 26
19 февраля, 14:46
"Как узнать длину уже созданного массива array?" такой бред не включать .length(), хотя метод возвращает длину уже созданного массива
Gans Electro
Уровень 59
27 мая, 15:31
.length() это метод. А у массива нет метода .length(). Да и кажется вообще методов нет. length это поле у объекта или переменная. Потом пройдут. .length() есть у String например
C0N5P1RACY QA Automation Engineer
3 ноября 2025, 13:53
Поддержка тем, кто упал духом: 1. Пока мы живы, возможно всё. 2. Чтобы научиться чему-то, нужно время, иногда много времени. 3. Докажите самому себе, что вы можете. 4. Если кто-то уже делал до вас то, что вы задумали, значит, это можете сделать и вы. 5. В жизни будет встречаться много людей, которые захотят удержать вас там, где вы сейчас находитесь. Они будут убеждать вас в том, что вы задумали невозможное и нужно посмотреть правде в глаза. Не позволяйте никому рушить свою мечту. 6. Вы заслуживаете счастья. Никогда не позволяйте никому убеждать вас в обратном. Вы заслуживаете того, чтобы быть счастливым и успешным. Придерживайтесь этой позиции и никогда не сомневайтесь в этом, пока не достигнете заветной цели. 7. Вдохновляйте других. Станьте примером для них, как человек, который никогда и ни при каких обстоятельствах не сдаётся. Кто знает, чего может достигнуть кто-то другой, просто посмотрев однажды на вас и тоже решив никогда не сдаваться. 8. Множество людей опускали руки, даже не подозревая, что находятся всего в одном шаге от успеха. Никому не известно наверняка, когда придёт успех. Возможно, это произойдёт уже завтра, а может быть, через год или два. Но если вы остановитесь, перестанете пытаться и сдадитесь, то не достигнете его ни через 10 лет, ни даже к концу жизни. В следующий раз, когда захочется всё бросить, подумайте, ведь очень может быть, что успех ждёт вас уже за следующим поворотом.
САН САНЫЧ
Уровень 20
13 декабря 2025, 17:54
все это правильно когда ты материально ничем не рискуешь.
Alina GabidulinaРаботает в M2
6 октября 2025, 10:04
А почему методы массивов делают действия не полностью, а до конченого индекса -1, почему не включительно?
Anonymous #3656771
Уровень 20
22 октября 2025, 09:05
а это чтобы отроков еще больше запутать. "...осторожно, кавычки закрываются..."
x4Sting
Уровень 9
13 ноября 2025, 18:36
public static int[] copyOfRange(int[] original, int from, int to) { if (from == 0 && to == original.length) { return original.clone(); } int newLength = to - from; if (newLength < 0) { throw new IllegalArgumentException(from + " > " + to); } int[] copy = new int[newLength]; System.arraycopy(original, from, copy, 0, Math.min(original.length - from, newLength)); return copy; } Как видим на примере copyOfRange, to используется только для вычисления размера нового массива. Если бы использовались точные необходимые нам индексы, то длинна массива была меньше на 1 от необходимого. Думаю в других случаях что-то подобное тоже
KEN Software Developer
16 апреля, 16:12
Тоже задумался об этом. Загуглил и там есть ответ.
import java.util.Arrays;

public class Solution {
    public static void main(String[] args) {
        int[] example = {1, 4, 3, 2, 9, 4};
        Arrays.fill(example, 0, example.length, 10 );
        System.out.println(Arrays.toString(example));
    }
}
Вывод в консоль: [10, 10, 10, 10, 10, 10] Тогда пришлось бы писать example.length - 1, видимо не очень красиво, и привело бы к ошибкам.
hidden #3515555
Уровень 26
24 сентября 2025, 08:55
По сравнению со старым курсом задачи какие-то неинтересные что ли, просто показать возможности статических методов.
nlpРаботает в ничего особого
23 октября 2025, 10:24
не знаю какие задачи были на прежнем курсе. Но тут каждую тему кидаешь gpt он тебе делает по 3-5 задач и норм прям)
Dthmth Backend Developer
24 октября 2025, 16:28
а я думал тут темы копировались просто с прошлого курса, которые повторились
SB
Уровень 115
6 апреля, 19:16
лайт версия ) Сделай этот, продолжи старый, или задачи там такие же?