java.util.Arrays: сортировка, поиск, копирование и сравнение
💻 Информатика · 10 класс
Практический разбор Arrays.sort, binarySearch, copyOf и equals с ловушкой asList.

Что такое Arrays
java.util.Arrays — служебный класс стандартной библиотеки Java со статическими методами для работы с массивами. Перед использованием обычно пишут import java.util.Arrays;. Массив остаётся массивом фиксированной длины: вызов метода не превращает его автоматически в изменяемый список.
Основные операции
| Метод | Что делает |
|---|---|
| sort(a) | Сортирует сам массив a |
| binarySearch(a, key) | Ищет в предварительно отсортированном массиве |
| copyOf(a, n) | Создаёт новый массив длины n |
| equals(a, b) | Сравнивает содержимое одномерных массивов подходящего типа |
| toString(a) | Даёт удобное текстовое представление одномерного массива |
Разобранный пример
int[] values = {3, 1, 2};
int[] backup = Arrays.copyOf(values, 5);
Arrays.sort(values);
System.out.println(Arrays.toString(values));
System.out.println(Arrays.toString(backup));
System.out.println(Arrays.binarySearch(values, 2));Получатся строки [1, 2, 3], [3, 1, 2, 0, 0] и число 1. Сортировка изменила values. Копия создана раньше и хранится отдельно; при увеличении длины новые элементы int заполнены нулями. Индексация начинается с нуля, поэтому число 2 находится по индексу 1.
Если искомого элемента нет, binarySearch возвращает не просто -1, а отрицательное значение, связанное с позицией вставки: -(insertionPoint) - 1. В [1, 2, 3] поиск 4 даст -4, потому что позиция вставки равна 3. При дубликатах метод не обещает найти именно первое вхождение.
Сравнение и диапазоны
Оператор == сравнивает ссылки на массивы. Два отдельных массива [1, 2] могут иметь одинаковые элементы, но разные ссылки; для содержимого нужен Arrays.equals. Для вложенных массивов применяют deepEquals, если требуется сравнение вложенного содержимого.
В диапазонных методах, например copyOfRange(a, from, to), левая граница включается, правая исключается. Это обычная причина ошибки на один элемент. Для Arrays.copyOfRange(new int[]{5, 6, 7}, 1, 3) результат — [6, 7].
Ловушка Arrays.asList
Arrays.asList("a", "b") даёт список фиксированного размера, связанный с переданным массивом; заменить элемент можно, добавить новый — нельзя. А Arrays.asList(new int[]{1, 2}) содержит один элемент типа int[], а не два Integer. Примитивный массив не распаковывается автоматически в список чисел.
Практика
- Что выдаст binarySearch для [2, 4, 6] при поиске 5?
- Как сравнить два отдельно созданных int[] по элементам?
- Чему равен размер Arrays.asList(new int[]{7, 8, 9})?
Ответы
1. -3: позиция вставки 2, значит -2 - 1. Массив должен быть отсортирован. 2. Arrays.equals(a, b), а не a == b. 3. 1: единственный элемент списка — целый примитивный массив.
Перед запуском
Проверьте тип элементов, необходимость копии и предусловия поиска. Документация сверена для Java SE 25; разобранные базовые методы существуют и в более ранних распространённых версиях, однако доступность других перегрузок следует проверять для своего JDK.