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

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

JAVA 25 SELF
7 уровень , 5 лекция
Открыта

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 лекция
Недоступна
Сверка секретных кодов доступа 🔐
Сверка секретных кодов доступа 🔐
1
Опрос
Массивы, 7 уровень, 5 лекция
Недоступен
Массивы
Знакомство с массивами
Комментарии (8)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
C0N5P1RACY Уровень 21
3 ноября 2025
Поддержка тем, кто упал духом: 1. Пока мы живы, возможно всё. 2. Чтобы научиться чему-то, нужно время, иногда много времени. 3. Докажите самому себе, что вы можете. 4. Если кто-то уже делал до вас то, что вы задумали, значит, это можете сделать и вы. 5. В жизни будет встречаться много людей, которые захотят удержать вас там, где вы сейчас находитесь. Они будут убеждать вас в том, что вы задумали невозможное и нужно посмотреть правде в глаза. Не позволяйте никому рушить свою мечту. 6. Вы заслуживаете счастья. Никогда не позволяйте никому убеждать вас в обратном. Вы заслуживаете того, чтобы быть счастливым и успешным. Придерживайтесь этой позиции и никогда не сомневайтесь в этом, пока не достигнете заветной цели. 7. Вдохновляйте других. Станьте примером для них, как человек, который никогда и ни при каких обстоятельствах не сдаётся. Кто знает, чего может достигнуть кто-то другой, просто посмотрев однажды на вас и тоже решив никогда не сдаваться. 8. Множество людей опускали руки, даже не подозревая, что находятся всего в одном шаге от успеха. Никому не известно наверняка, когда придёт успех. Возможно, это произойдёт уже завтра, а может быть, через год или два. Но если вы остановитесь, перестанете пытаться и сдадитесь, то не достигнете его ни через 10 лет, ни даже к концу жизни. В следующий раз, когда захочется всё бросить, подумайте, ведь очень может быть, что успех ждёт вас уже за следующим поворотом.
САН САНЫЧ Уровень 17
13 декабря 2025
все это правильно когда ты материально ничем не рискуешь.
Alina Gabidulina Уровень 27
6 октября 2025
А почему методы массивов делают действия не полностью, а до конченого индекса -1, почему не включительно?
Anonymous #3656771 Уровень 20
22 октября 2025
а это чтобы отроков еще больше запутать. "...осторожно, кавычки закрываются..."
x4Sting Уровень 9
13 ноября 2025
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 от необходимого. Думаю в других случаях что-то подобное тоже
hidden #3515555 Уровень 26
24 сентября 2025
По сравнению со старым курсом задачи какие-то неинтересные что ли, просто показать возможности статических методов.
nlp Уровень 21
23 октября 2025
не знаю какие задачи были на прежнем курсе. Но тут каждую тему кидаешь gpt он тебе делает по 3-5 задач и норм прям)
Dthmth Уровень 11
24 октября 2025
а я думал тут темы копировались просто с прошлого курса, которые повторились